'IT 이야기' 카테고리의 첫 번째 글에서 '프로그래밍 언어'라는 주제로 다루었었습니다. 개발자를 미치게 한다는 프로그래밍 언어의 종류들과 그에 대한 간단한 설명들을 소개했었습니다.
국비 지원 교육의 일환으로 프로그래밍 교육을 받고 있는 중인데, 현재 교육 과정 중에는 C언어에 대해서 배우고 있습니다. 따라서 오늘은 C프로그램에 대해 소개하도록 하겠습니다.
세계의 각기 다른 엄청난 종류의 language가 있듯, programming language에도 수 많은 종류가 있습니다. C언어는 programming language의 종류 중 하나일뿐이죠. 하나일 뿐이라고 하기엔 대부분의 개발자들에게 막강한 영향력을 끼치고 있습니다. 그 영향력을 프로그래밍 언어 중 차지하는 순위를 통해 살펴보도록하겠습니다.
https//www.tiobe.com/tiobe-index/
현재 시점인 2017년 4월 12일 기준으로 C의 순위는 2위라는 것을 확인할 수 있습니다. 수 많은 programming language 중 2위를 차지한 만큼 C프로그램의 견고한 위상이 어느정도인지 감이 올 수 있겠죠? 이렇게 강한 위력을 가지게 된 배경에 대해서 한번 알아보도록 하겠습니다.
C언어의 역사
1971년 현대 컴퓨터의 선구자이자 미국의 저명한 전산학자인 데니스 리치(Dennis Ritchie)에 의해서 개발되었습니다. programming language의 아버지 격인 이 언어는 우연히 개발된 것이 아닙니다. 데니스 리치가 UNIX 운영 체제를 제작하려고 하는데 기존에 있던 프로그래밍 언어들로는 한계가 있다고 느껴 개발하게 되었습니다.
이제, C언어 이전에 어떤 언어가 존재하였으며 그것이 어떻게 발전하여 완성이 되었는지 살펴보도록 하겠습니다. C언어는 이전에 벨 연구소의 켄 톰슨(Ken Thompson)이 개발한 B언어를 계승한다는 점에서 'C'라는 이름을 가지게 되었습니다. B언어는 벨 연구소의 'B'를 따온 것이고, C언어는 B언어 이전인 CPL이라는 언어의 디자이너였던 Christopher Strachey의 C를 따왔다고 합니다.
C언어의 특징
이식성(portable)이 좋습니다. 예를 들어, C언어가 개발되기 이전에는 IBM의 컴퓨터 시스템에서는 IBM언어만, SAMSUNG 컴퓨터 시스템에서는 SAMSUNG언어만 사용이 가능했는데, C언어가 개발된 이후에는 어떤 CPU의 종류라도 기종을 가리지 않고 사용이 가능하기에 범용 언어로서 손색이 없습니다. 이것이 이식성이 좋다고 말합니다.
다른 언어에 비해 소스파일의 크기가 상대적으로 적으며 속도를 저해시키는 요소들을 최소화할 수 있습니다. 따라서 메모리를 효과적으로 사용할 수 있으며 실행속도 또한 빠르다는 장점이 있습니다.
모듈식 설계가 용이합니다. 함수로 구성되어 있는 함수형 언어로, 작성되는 프로그램은 함수(function)라는 것을 사용하여 간결하게 작성할 수 있습니다.
하드웨어를 제어할 수 있는 low-level language의 효율성과 사용자 중심의 high-level language의 생산성을 균형있게 가지고 있다는 장점이 있습니다. 그래서 다른 언어가 대체하기 어려운 효율성을 가지고 있는 셈이죠.
절차지향적인 언어입니다. 절차지향적이란 프로그램을 짜는데 있어서 실행이 순차적으로 흘러간다는 것입니다. 따라서 인간의 절차지향적인 사고방식과 어느정도 일맥상통하여 순서를 따라가면서 프로그래밍을 하는 것은 우리에겐 다른 언어를 사용할 때 보다 익숙하게 느껴집니다.
위의 C언어의 역사에서 서술한 것과 같이 현재 프로그래밍 언어들은 C언어를 기반으로 만들어진 것이 대부분입니다. 따라서 배우고 나면 다른 언어는 배우는데 큰 어려움을 겪지 않고 상대적으로 수월하게 배울 수 있습니다.
이런 몇 가지 특징으로 알 수 있듯이, C프로그램은 강력한 기능을 제공하면서도 융통성을 발휘하여 유연하다고 할 수 있습니다. 따라서 전문적인 프로그래머들이 선호하는 programming language 중에 하나가 아닐까 싶네요.
'Code.D IT 강좌 > C언어' 카테고리의 다른 글
C언어 기본 틀/Hello World 출력, 프로그래밍의 시작을 알리다 (0) | 2017.05.11 |
---|---|
[데이터 저장 방법] 파일시스템/DBMS 장단점 (0) | 2017.04.14 |
#3 Eclipse-CDT 설치 (0) | 2017.04.07 |
#2 Eclipse 및 MinGW 설치 (0) | 2017.04.06 |
#1 JDK 설치 및 시스템 환경 변수 등록 (0) | 2017.04.05 |