1972년, 벨 연구소의 데니스 리치가 만든 범용 프로그래밍 언어로 세계적으로 많이 쓰이는 프로그래밍 언어중 하나이다.
[사용분야]
- 운영체제 및 디바이스 드라이버
- 마이크로 컨트롤러
- 임베디드 시스템
- 암호학
- CPython 등의 프로그래밍 언어 인터프리터
- 매우 빠른 계산속도가 필요한 프로그램, 라이브러리의 구성
위의 예시를 보면 알 수 있듯이 C언어로 짜여진 코드는 속도가 매우 빠르고 바이널 크기도 작아 속도가 매우 빠르다.
따라서 정밀기계 등의 적은 메모리공간에서도 작동할 수 있거나 시시각각 빠른 연산이 필요할 때 많이 사용된다.
하드웨어나 컴퓨터 아키텍처를 배우게 된다면, C언어의 특징은 오히려 장점이 된다. Java나 Python 같은 언어들은 일반적인 상황에서 생산성을 높이기는 좋지만 특정한 상황에서 속도를 높이기는 어렵다. 일반적인 개발을 하려면 많은 상황을 처리할 수 있도록 강력하고 복잡하게 만들어야 하기 때문이다.
따라서 고성능이 필요한 특정 목적이 필요할 경우 언어에서 쌓은 추상화의 장벽을 뚫고 저수준(low level) 개념을 이용할 필요가 있는데, 이에 관한 개념을 제대로 이해하려면 처음부터 OS와 기계 제어를 위해 태어난 C언어를 사용하는 것이 가장 효과적이다. 다시 말해, C언어를 공부한다는 말은 곧 하드웨어를 공부한다는 말과 같다고 할 수 있다.
특히나 다른 언어에 비해 메모리관리를 할 수 있어서 (java 등의 언어는 garbage collector가 자동으로 메모리 누수(memory leak)을 잡아준다.) 메모리 누수를 모두 잡는다는 가정하에 매우 뛰어난 메모리 관리효과를 기대할 수 있다.
물론 이는 단점이 될 수도 있지만 말이다.
단점은 문자와 문자열, 포인터와 배열의 혼동과 범위를 넘어선 배열접근(buffer overflow) 등을 꼽을 수 있다.
하지만 이런 여러 단점들에도 C언어는 50여년이 훨씬 지난 지금에도 여전히 자리를 굳건히 지키고 있으니 배워보는것은 추천이 아니라 필수라 생각한다.
'C | C++ > C언어' 카테고리의 다른 글
this.Code(5)_ 포인터배열 & 배열의 포인터, 배열기반 포인터, 포인터의 포인터 응용 (0) | 2022.11.06 |
---|---|
this.Code(4)_ 문자열 표현, Call-by-Value(함수인자 전달), 포인터와 상수화 ★★★★★ (0) | 2022.11.06 |
this.Code(3)_ 배열과 포인터, 포인터에 의한 간접접근과 직접접근 (2) | 2022.11.06 |
this.Code(2)_ switch문, 반복문, 비트연산자, 함수(argument와 parameter), block scope (0) | 2022.11.06 |
this.Code(1)_ 입출력과 여러연산자, return 0; (0) | 2022.11.06 |