본문 바로가기

Programing/C and C++

What is C Programming Language?

 현재 하고 있는 직업 특성상 파이썬의 필요성을 느껴 공부를 하고 있습니다. 그런데 파이썬을 공부하다 보면 여러 책이나 자료에서 C언어와 비교를 하거나 언급되는 경우가 많이 있습니다. 그래서 이 C언어라는 것을 조금이라도 알아가 보려고 합니다. 전공수업이 아니기 때문에 최대한 겉핥기식으로만 진행하고자 합니다. (추후 필요하다면 파고들어볼 예정입니다... 그런데 느낌상 할 것 같네요...)

 

 먼저, C언어는 1972년 케니스 레인 톰프슨(Kenneth Lane Thompson)데니스 매캘리스테어 리치(Dennis Ritchie)가 벨 연구소에서 일할 당시 새로 개발된 유닉스 운영체제에서 사용하기 위해 개발한 프로그래밍 언어입니다. 이 C언어의 초기 개발은 1969년부터 1973년까지 약 4년에 걸쳐 AT&T 벨 연구소에서 이루어졌습니다. 

 그런데 왜 A나 B언어가 아니라 C언어 일까? 처음 켄 톰슨은 BCPL언어를 고쳐서 B언어(언어를 개발한 벨 연구소의 B언어로)를 개발했는데 데니스 리치가 이것을 개선해 C언어가 탄생했습니다.

 유닉스 시스템의 바탕이 되는 모든 프로그램을 C로 작성했고, 수많은 운영체제의 커널 또한 C로 만들어졌습니다. 그리고 오늘날 많이 사용되고 있는 C++은 C언어의 증감연산자 ++를 활용해 C언어에 객체지향형 기능을 추가한 언어를 말합니다. 또한 다양한 프로그래밍 언어들이 그 뿌리를 C언어에 두고 많은 영향을 받았습니다.

 이런 C언어는 절차지향형 언어(procedure-oriented language)입니다. 절차지향이란 어떤 특정한 명령어들을 어떤 순서로 몇 번 실행할 것인지 결정하는 방식으로 만들어지는 것을 말합니다. 리소스가 많이 없는 기계를 작동시킬 때 유용하고, 하드웨어와 매우 밀접하게 작동하기 때문에 주로 시스템 프로그래밍(OS, Operating System)나 내장형(embedded) 프로그래밍에서 많이 사용됩니다.

 

 그래서 우리가 많이 사용하고 있는 Windows, 리눅스, OS X와 iOS, 안드로이드와 같은 모바일 운영체제의 핵심 요소인 커널은 대부분 C언어로 만들어져 있다고 합니다.  그리고 에어컨, 세탁기, 스마트 TV 같은 가전제품에 작은 컴퓨터가 들어가 있는데 이 컴퓨터 역시 C언어를 주로 사용한다고 합니다. 즉, 운영체제의 모든 기능을 이용할 수 있는 것은 C언어입니다.

 

 특히 메모리와 하드웨어를 직접 제어하는데는 C언어를 따라갈 언어가 없다고 합니다. (파이썬을 공부하면서 복잡한 계산에 의한 메모리 사용은 C언어의 사용에 대한 언급을 많이 봤습니다.) 스마트폰의 하드웨어를 직접 제어하는 커널이 대부분 C언어로 작성된 것도 이와 같은 이유 때문입니다. 대부분의 사람들이 모르는 부분이지만 C언어는 컴퓨터 세상의 기반을 깊게 이루고 있습니다.

 

 2020년 3월 TIOBE 지수와 2000년대 초반 부터의 프로그래밍 사용 빈도 그래프를 보면 C언어의 사용 빈도를 알 수 있습니다.

https://www.tiobe.com/tiobe-index//
https://www.tiobe.com/tiobe-index//

 이렇게 C언어는 많은 프로그래밍 언어에 직. 간접적으로 많은 영향을 주었는데 관련 전공자 지인들에게 물어보면 항상 저에게 해주는 말이 'C언어를 배우면 다른 프로그래밍 언어를 배우기 쉽다.'라고 하는 이유도 이 때문인 것 같습니다.

 C언어를 조금이라도 이해하고 있어야 할 이유가 명확해진 것 같습니다. C언어는 C++, Java, C#, 등 다양한 언어에 큰 영향을 주었기 때문에 이들 언어는 문법을 비롯하여 다양한 부분이 C언어와 유사합니다. 그래서 C언어를 배우면 다른 언어를 배우기가 쉽다는 말이 나오는 것입니다.

 학부시절부터 선배들에게 C언어가 어렵다는 말을 많이 듣다 보니 시작도 하기 전에 포기한 적이 많이 있습니다. 이렇게 C언어에 대해 조사하고 알아가다 보니 프로그래밍의 기초를 제대로 배우기 좋은 언어라는 생각이 들었습니다. 앞으로 C언어에 대해 조금이라도 배울 수 있는 시간을 할애할 필요가 있을 것 같습니다.