안녕하세요 기형쌤입니다.

이제 날씨는 완전 겨울이 되어버렸네요.

위험한 시국에 감기걸리시면 위험하니 다들 옷 따듯하게 입으셔야해요...!

 

오늘 들고 온 이야기는 C언어에 관해서입니다.

프로그래머를 꿈꾸는 사람이라면 가장 처음 고민하는것이

C언어를 배울까? 와 그래서 C언어는 도대체 뭐지?

하는 고민일 것 같은데요

 

오늘은 C언어에 대한 기본적인 정보를 공유해드리려고 합니다.

C언어는 무엇일까요?

C언어는 1972년 벨 연구소의 데니스 리치 라는 사람이 만든 프로그래밍 언어입니다.

명칭은 그냥 C 이지만 우리나라에서는 C 언어 라는 명칭으로 주로 불립니다.

수많은 프로그래밍 언어가 생겨났지만 여전히 명실상부 가장 많이 쓰이는 프로그래밍 언어이기도 합니다.

 

C언어는 탄생 어원으로 들어가면 ALGOL이라는 언어에서부터 시작되었다고 할 수 있습니다.

ALGOrithemic Language의 줄임말인데 말 그대로 알고리즘 연구 개발에 사용되던 언어였습니다.

이것을 더 다양한 용도로 사용하기 위해 개발하고 개발하여 나온 언어가 Basic CPL이라는 언어였고

이 언어가 미국으로 건너오며 통칭 B라는 언어로 개발되어 불리웠습니다.

 

그리고 데니스 리치가 PDP-11이라는 컴퓨터를 제어하기 위해 B 언어의 특징을 물려받은

C 언어를 만들게 되었습니다.

 

C언어는 효율성을 중시하여 만들어진 언어입니다.

현재는 Java라던지 Python같은 쉽고 편한 언어들이 생겨났지만

당시의 프로그래밍 환경에서는 그렇지 못 했습니다.

C 언어 이전에도 고수준 언어들은 많이 존재했지만,

대부분 특정 어플리케이션 영역을 대상으로 하거나,

컴퓨터 과학 이론을 입증하기 위해 만들어진 실험실 언어들이었습니다.

 

당시에는 운영체제를 어셈블리어가 아닌 언어로 작성한다는 것은 금기라 말 할 정도로

시도조차 하면 안되는 것 이라는 인식이 있었습니다.

그러나 C언어는 그러한 금기를 깨는 엄청난 효율성을 보여주었고 금기를 정면으로 깨버렸죠.

그리고 아이러니 하게도 현대에 들어서 운영체제는 C언어가 아니면 안된다는 새로운 금기가 생겨버렸습니다.

그동안 컴퓨터의 평균 성능이 놀랍게 발전했고,

운영체제 역시 초기와는 비교할 수 없을 정도로 커져 효율성이 중요해졌기 때문입니다.

 

C는 처음부터 어셈블리어와 비교할만한 효율을 가지게 저수준으로 설계되었습니다.

개발 당시의 고수준 언어들은 원래는 프로그램 코드가 업무 서류로도 사용이 가능하도록 설계가 돼있기도 하여

문법들이 굉장히 불친절했습니다.

C는 이런 당대 고수준 언어들에 비해 매우 이해가 가기 쉬운 문법을 사용하여 초보자가 쉽게 접근할 수 있었죠.

 

C언어 자체는 지원되는 기능이 적고 문법이 간단합니다.

객체 지향 프로그래밍(OOP)이나 코루틴, 클로저, 메타 프로그래밍 등

고수준의 기능들을 지원하는 언어들과 비교하면 특히나 그렇습니다.

550쪽 정도밖에 안 되는 C언어 표준에서도 순수 문법 부분은 200쪽 정도밖에 안 되며

나머지는 다 라이브러리 관련 부분이고, 함수의 개수로 치면 고작해야 150개 근처밖에 되지 않습니다.

수천 개나 되는 기본 라이브러리를 지원하는 다른 언어들과 비교하면 정말 작고 간단하죠?

초반의 포인터 장벽만 넘는다면 문법 자체를 마스터하고

간단한 커맨드라인 프로그래밍을 할 수 있는 수준까지는 엄청 쉽게 진행하실 수 있습니다.

 

하지만 기능이 적다고 결코 쉬운 건 아니겠죠.

프로그래밍을 할 때 지원하는 기능이 적다고 그 적은 기능만 쓸 수는 없으니까요.

따라서 기본 라이브러리에서 지원하지 않는 기능은 결국 프로그래머가 직접 구현해서 써야 하는데,

1970년대 이후 프로그래밍 언어계에서 오늘날 영어와 같은 위치를 차지하고 있던 덕분에

그런 기능의 구현이나 최적화에 관한 많은 트릭들이 존재하고 이것을 얼마나 많이 알고있는가가

사실 C언어의 핵심이 됩니다.

C언어의 장점?

사람들이 많이 사용하는데에는 이유가 있겠죠?

 

C로 짜여진 코드는 속도가 빠르고 바이너리 크기도 작아 속도가 다른 무엇보다도 중요한 임베디드 혹은 모바일 계열,

또는 시스템 프로그래밍 등에서 주로 사용됩니다.

프로그램의 규모가 커질경우 C언어로 작성해서 얻을 수 있는 파일의 규모는 Python보다 훨씬 작기까지 하죠.

과거에는 메모리 가격이 비쌌던 만큼 메모리를 적게 잡아먹는 프로그래밍 기법이 선호했으며,

화성 탐사선도 이러한 점을 반영하여 C언어로 만든 프로그램을 사용했습니다.

 

이러저러한 고급 언어들이 나오는 상황에서도 아직 저수준의 제어를 위해 C가 필요한 경우도 많습니다.

예를 들어, OS를 만든다면 아무리 생산성을 고려한다고 해도

시스템 제어 측면과 OS의 기능들 위에서 돌아가는 어플리케이션 때문에라도 속도라는 면은 중요하고

그렇다고 속도를 높이기 위해 어셈블리어나 기계어로만 OS를 짜기에는 생산성이 매우 낮아지기 때문에

결국 돌고돌아 C를 쓰게되죠.

 

현시점에서 C의 가장 큰 의의는 사실상 모든 아키텍쳐와 운영체제에서 지원하는 언어라는 점입니다.

일반적으로 C++는 지원하지 않더라도 C는 지원하는게 보통이 되었습니다.

워낙 널리 쓰이다보니 CPU 디자이너들이 가장 먼저 하는 일은 C언어를 instruction set으로 포팅하는 것이

기본적인 상식이 되었고, 심지어 C언어 설계 자체가 CPU 인스트럭션 설계에 영향을 주는 단계에 이르렀습니다.

그런 관계로 이식성이 중요한 경우는 대개 C를 사용합니다.

 

고수준의 언어들이 많이 나오고있고 이렇게 이미 한물 간 언어처럼 보이지만,

여전히 '프로그래밍' 입문으로는 C를 추천하는 추세입니다.

 

C라는 언어는 매우 심플하면서도 배우는 과정중에 소프트웨어 구성의 최소단위인 bit부터 시작해서

메모리 관리, 그리고 고급 개념인 OOP와 비슷한 정도까지 흉내내면서 소프트웨어 전반을 훑게 되고,

C 를 배우는 과정중에 나오는 과제들은 커맨드라인에서 이미 쓰이고있는 기본적인 툴들을

reinvent the wheel하는식의 과제들이 많기때문에 바닥부터 훑어가며 견문을 넓히는데 좋습니다.

 

로우레벨부터 단계를 높여가며 관찰을 해보면,

머신코드는 머신에 따라 달라지고, 어셈블리어도 Intel/AT&T 등 문법에 따라 몇가지 버전이 존재하지만

결국 그 위쪽에서 C 언어로 대통합이 이루어지게 됩니다.

 

그리고 C 언어 위 쪽으로 향하게 되면  C++/Java/C#/Objective-C/Python 등으로 다양하게 갈라지죠.

결국 C 언어란 것은 과거와 현재를 잇는 중요한 꼭짓점이 되는 셈입니다.

C 언어가 사용되는 분야는?

C 언어가 사용되는 대표적인 분야는

기본적으로 운영체제 및 디바이스 드라이버 분야입니다.

윈도우, 리눅스, 유닉스 커널의 핵심부는 모두 C로 짜여져있습니다.

 

이외에는 마이크로 컨트롤러, 임베디드 시스템, 암호학 라이브러리, 프로그래밍 언어 인터프리터(CPython 등),

웹서버 등등의 기타 빠른 계산속도가 필요한 프로그램이나 라이브러리들에 사용됩니다.

그렇다면 C언어는 어디서 배우는게 좋을까?

C언어는 사실 쉬운언어이기에 혼자 독학하는 학생분들도 많습니다.

다만 기초를 탄탄히 잘 다져놓는것이 전문가가 되어가는 과정이라고 생각 합니다.

기초를 탄탄하게 쌓으시려면 좋은 곳에서 좋은 선생님께 배우는게

결국은 실력을 빠르고 확실하게 키우는 방법입니다.

 

IT 전문가가 되고싶으시다면 연락 주세요.

언제든지 무료 상담 해드리겠습니다.

 

아래의 네임카드를 클릭

해주시면 상담 진행 바로 가능합니다!

네임카드를 클릭해주세요!!

+ Recent posts