본문 바로가기
개발이야기/C와 컴퓨터 공학 기초

C언어의 탄생과 특징

by oddsilk 2024. 6. 3.

 

 

알렉산더 그레이엄 벨 = 실용적 전화기의 발명가

 

이 벨이라는 사람이 AT&T라는 거대한 통신사를 세웠다.

그리고  이 통신사에서 연구를 하기위해 세운 연구소가 벨 연구소이다.

 

컴퓨터의 가장 중요한 핵심부품인 '트렌지스터'가 바로 여기에서 발명되었다. 

인공지능 빅데이터에서도 굉장히 중요한 정보이론인 샤넨의 정보이론도 여기에서 나왔다. 

우리가 공부하는 C언어도 여기에서 창조되었다. 

 

 

Dennis Ritchie 와 Ken Thompson 이 두사람이 c언어를 만들었다고 한다

좋은 친구를 두고 같이 공부하고 같이 성장하는게 그만큼 중요하다. 

원래는 Unix라는 운영체제를 공부하는 친구였다고 한다.

수많은 운영체제들이 바로 여기에서 나오기 시작했다. 

 

Unix를 원래는 어셈블리 언어로 만들었다. 

근데 어셈블리로 모든 것을 만들 순 없겠다고 판단한 두 사람은 C언어를 만들어 Unix 운영체제를 만드는 데에 도입을 했다. 막상 써보니 너무 좋아서 나중에는 Unix를 C언어로 다시 만들정도였다고 한다. 

https://www.youtube.com/watch?v=yOyaJXpAYZQ

위 사진만 보더라도 알 수 있다. 오른쪽이 훨씬 인간으로서 사람으로서 이해하기 쉽다.

 

 

C언어의 특징

1. 프로그램의 효율성을 높일 수 있는 강력한 언어다 

C는 기본적으로 운영체제를 만들기위해 탄생한 언어이기 때문에, 당연하게도 속도가 빠르다. 운영체제가 느리면 그 위에 돌아가는 소프트웨어는 더욱 느릴 것이다. 

 

운영체제의 중요한 역할이 컴퓨터에 있는 하드웨어를 제어하고 관리하는 것이다. 그 하드웨어에는 당연히 CPU하고 메모리도 포함이된다. 그래픽카드도 포함이다

C언어는 하드웨어에 대해서 아주 강력하게 작동을 한다. 

사실 우리가 사용하는 모든 프로그램을 하드웨어를 제어하는 것이다. 그렇기때문에 하드웨어를 가장 프로그래머의 마음대로 각력하게 제어한다는 측면에서 C언어는 굉장히 강력하다 

 

2. C언어는 유연하다

사실상 C언어로 모든 프로그램을 만들 수 있다. 때문에 제한적이기는 커녕 굉장히 유연하다.

현대 프로그래밍 관점에서 C를 모든 곳에 쓰는 것은 '사람의 생산성'관점에서 좋은 것은 아니다. 

 

 

3. 프로그래머 중심이다

C를 배우면 당연히 C++도 배우게된다. 

C와 C++은 장단점을 공유하는 측면이 있다. 

 

물론 C언어 만의 장점, C언어만의 용도 이런 것도 분명히 존재합니다. 

공유하는 것들 중에 가장 큰거 하난가 두 언어의 특징이 프로그래머 중심이라는 것이다. 

즉, 프로그래머가 할 수 있도록 많은 권한을 준다 (즉, 책임도 프로그래머에게 있다 ㅎㅎ) 

 

다른 시스템으로 이식하기에도 좋다. 

Windows에서 만든 C언어 프로그램도 Linux에서 이식하기에 쉽다. 

가볍지만 빠르게 돌아가야하는 작은 하드웨어에도 적합하다. 

 

 

C언어의 단점

"자유의 대가는 영원한 불면증이다"

즉, 그만큼 주의해서 사용해야하는 언어임에는 분명하다. 

 

C언어의 사용성

C와 C++ 은 어디에서 쓰이냐??  우리가 생각하는 대부문의 컴퓨터 화면은 그 안쪽에서 다 C와 C++로 돌아가고 있다.

컴퓨터 그래픽 등..

 

인터넷에 언어 랭킹을 보면 계속해서 변동 폭이 높은 것들이 있다.

하지만 C와 C++은 랭킹에서 높은 순위는 아니더라도 절대 사라지지 않는 언어다 

(사실 은근히 높은 순위를 차지하고 있기도 하다 )

좋은 경력을 가진 프로그래머들은 무엇을 공부했는가? 라는 것이다. 

대부분 현업에서 다른 언어를 쓰더라도 C 또는 최소한 C++는 거쳐간다. 

 

C언어의 표준

프로그래밍 언어는 사람이 만든 것이기때문에, 결국 변한다 모든 프로그래밍 언어가 그렇다. 

그래서 표준이라는 것은 시대에 따라서 변화한다. 

 

1. K&R C(1978)

유닉스를 제작할때 사용한 C언어의 제작자 Dennis Ritchie와 사용하고 감명받아 메뉴얼을 작성한 Kernighan이 작성한 메뉴얼이 사실상 표준이었다. 

저자의 머릿말을 따서 K&R C(Classic)이 실질적 표준으로 사용되었다. 

 

C언어는 유닉스라는 운영체제와 함께 배포가 되었기 때문에 유명하다. 이 유때문에도 사실상 이 라이브러리가 표준으로 사용되었다.

 

 

2. The Sprit of C (1989~1990)

사람들이 정말 많이 사용하고 유명해지니까 표준의 필요성을 느꼈다. 

American National Standard Institute(ANSI)와 International Organization for  Standardization(ISO) 로 미국 표준과 세계표준을 만들게 되었다 

 

C언어의 정신으로서 이때 적립을 하게된다.

1) 프로그래머를 믿어라,

- 프로그래머가 하려고 하는 일을 놔둬라, 그리고 책임도 프로그래머가 지게 하

2) 언어를 작고 단순하게 유지하라

- 기능을 부풀려서 어디든 쓸 수 있게 만드는 관점이 C언어에서는 없다

- 최소한, 그리고 강력하게

3) 한가지 연산을 할때는 한가지 방법만 제공하라

4) 호환을 보장할 수 없다고 하더라도 속도를 빠르게 하라

- 여러가지 플랫폼에 사용하는것보다 더 중요한 것은, 속도를 빠르게 유지하는 것이다 

 

 

3. ANSI / ISO C9X Committee  (C99) (1999)

1) 국제화

- 새로운 기능을 추가할때 C언어는 굉장히 보수적 접근을 한다. 하지만 국제화에 대응하기위해국제적인 문자 집합을 추가했다.

 

2) 64비트 프로세서의 대응

- 기존 32비트 뿐만아니라 64비트에도 대응하도록 표준을 정했다. 

 

3) 과학 공학 수치계산 적합도 개선 (Fortran대체)

- 포탄  탄환 계산 등등..

 

4) 언어를 단순하게 유지한다 

 

아니 세상에 할게 얼마나 많은데 작고 단순하게 어떻게 유지하냐??? 

C가 아닌 C++를 키워라는 말이 이때 나오게 된다. 

C++는 그래서 최근에도 표준이 계속해서 늘어나고 있다. 

때문에 C와 C++는 뗄레야 뗄 수 없는 관계가 되었다. 

 

4. C11 Standard

- C는 구닥다리 언어로서 외면받은게 아니다. 더 중요한 곳에 사용하기 위해서 보수적으로 관리하고 있는 것이다. 

- C99에서 사용하는 기능들을 선택적으로 변경했다. 

-- C언어는 여러가지 시스템에서 사용이 되기때문에, 윈도우,유닉스, 리눅수, 맥 OS 등  여기서 표준을 오히려 더 줄이면, 각각의 시스템에서 자기들에게 적합하도록 최적화를 하기가 좋다.  그래서 오히려 선택적으로 바꿨다.

 

- 멀티프로세서 대응 (cocurrent programming)

-- 프로그래머로서 반드시 알아야만 하는 것, CPU가 과거에는 하나밖에 없었는데, 이 하나의 코어를 어떻게 하면 더 빠르게 만들 것인가에 집중헤서 CPU를 개발하는 사람이 노력했지만, 최근에는 실리콘에서 뽑아낼 수 있는 연산능력은 다 뽑아냈다라는 말이 나올정도로 하나를 빠르게 하기보다는 여러개를 집어넣어서 여러개가 같이 일을 하도록 하는걸 중요하게 생각한다. 

 

그래서 멀티 코어를 가지고 동시성 프로그래밍 , 병렬 처리를 하는 기능들을 추가했다. 

 

5.C18 Standard

- c11의 결함을 수정하는 정도로 끝냈다. 

 

 

 

 

 

 

'개발이야기 > C와 컴퓨터 공학 기초' 카테고리의 다른 글

Window의 콘솔(Command prompt) 기본 사용법  (0) 2024.06.03
통합 개발 환경이란? (IDE)  (1) 2024.06.03
소프트웨어 개발의 7단계  (0) 2024.06.03
컴퓨터의 구조  (0) 2024.05.31
변수란?  (0) 2024.05.14