제가 C언어로 IT 분야에서 일을 시작하게 되었고, 그 동안을 뒤돌아 보면서 누군가에게 도움이 되었으면 하는 마음으로 이 Site를 만들었습니다. 다행스럽게도 저의 큰 딸이 IT 분야에서 일하고 있는 데, 이 Site를 많이 참고하고 있다고 합니다. 그래서 처음 C를 시작하는 분들을 위해서 C언어의 문법을 얘기하지 않으면 안될 것 같아서 글을 적어봅니다. 문법은 지속적으로 변경된 부분도 있지만, 문법 부분을 보시는 분들은 초보자일 가능성이 높기 때문에 어떻게 글로써 이해를 시킬 수가 있을 지는 사실 걱정이 됩니다만, 시작을 해보고 질의 사항에 따라서 보완이나 상세화를 더 하는 식으로 진행을 하려고 합니다.

 


 

C언어의 역사.

Dennis Ritchie 사진 (Wikipedia 참조)

C언어를 배우면서 C언어의 역사에 대해서 알고는 가는 것은 중요하다고 생각합니다. C언어의 역사는 OS인 UNIX의 시작과 함께합니다. Ken Thompson과 Dennis Ritchie는 1970년대 초반 UNIX 시스템을 개발하였습니다. 초반에 개발된 UNIX는 어셈블러로 개발되어 개발이 어려움이 있었습니다. Ken Thompson이 B언어를 개발하였고, 이를 개선하여 1972년, Dennis Richie는 C언어를 개발하였습니다. C언어를 개발한 목적은 UNIX의 Kernel을 개발하기 위하여 만들어졌습니다. 1978년, Dennis Ritchie와 Brian Kernighan은 C언어 책의 Bible인 "The C Programming Language"라는 일명 White Book을 발간합니다. 이 책이 발간 된 이후에 C언어는 급속도로 보급 됩니다.  1983년에 C언어의 표준인 ANSI C가 정리 되었고, 1999년의 C99, 2011년 의 C11을 거치면서 오늘날에 이르렀습니다. 

 

H/W적으로 Computer의 처리 구조(?)는 폰 노이만 방식이었다면, 제 개인적인 생각으로는 Software적으로 IT 분야에 가장 많은 영향을 준 분이 바로 C언어와 UNIX 시스템을 개발한 Dennis Ritche가 아닐까 생각됩니다.  ※잡설: 컴퓨터 구조에 대한 설계는 신입인 폰 노이만(Von Neumann)이 설계한 것이 아니라 다른 2사람(?)이 설계를 하고 신입인 폰 노이만이 문서로 정리하였는 데, 이 회사가 망하면서 이 문서를 폰 노이만이 발표하게 되어 마치 폰 노이만이 설계한 것으로 알려졌다고 합니다. 현재의 컴퓨터 구조도 폰 노이만 방식으로 사용되고 있습니다. (문서화의 중요성)

 

 

 


 

 

C언어의 영향.

C언어는 이후에 만들어 진 대부분의 프로그램 언어에 영향을 주었습니다. C++은 물론 Object C, Java, C# 등의 컴파일러의 문법이 C언어와 비슷하며, javascript, php, python 등의 다양한 언어에도 영향을 주었습니다. 
(C++언어는 C언어의 증감연산자 ++를 활용하여 C언어에 객체지향 기능을 추가하였다고 하여 C++라고 명명하였습니다.)

 

현재 만들어진 대부분의 OS와 프로그래밍 언어는 C언어로 개발되었습니다. POSIX(Portable Operatiing System Interface)의 규정에 따르면 OS를 만들면 반드시 C언어를 지원해야된다는 규정이 있습니다. 그래서 대부분의 OS에서 C언어를 지원합니다. 또한 현존하는 대부분의 프로그래밍 언어들이 C언어로 만들어져 있어서 그 언어에서 지원하지 않는 기능을 구현하기 위해서는 C언어를 사용하여 추가해야 하는 경우도 있습니다. 예를 들면, Java는 System Programming이 힘들고, Decompile(컴파일된 바이너리에서 다시 소스 코드를 생산하는 것)이 가능하므로 보안상 공개하면 안되는 부분이나 주요 기능을 C언어로 개발하여 JNI(Java Native Interface) 형태로 호출할 수 있습니다. 또한 요즘 Data 분석을 위해 많이 사용하고 있는 R 프로그래밍 언어도 필요한 라이브러리를 대부분 C언어로 개발하여 추가합니다. (Windows환경에서는 R의 package를 컴파일된 dll형태로, LINUX 환경에서는 R의 package 소스를 다운받아서 gcc 컴파일로 직접 컴파일을 합니다.)

 


 

C언어의 특징.

C언어는 이식성이 매우 뛰어난 언어입니다. C언어는 POSIX 규정에 따라 표준으로 제공해야 하는 함수들이 있으며, 같은 소스를 다른 OS에 복사하여 다시 컴파일을 하면 대부분은 실행이 가능합니다. 

C언어는 시스템 프로그래밍(Low Level)에서 일반 업무용 프로그램(High Level)까지 개발이 가능한 범용 언어입니다. 

C언어는 어셈블러(개발이 매우 어려움)를 제외하고는 성능이 가장 빠르게 동작합니다.

C언어는 스스로 실행하고 용량이 최적화되어 있습니다. (요즘 인기 있는 대부분의 언어(C++ 제외)들은 스스로 실행할 수 없습니다. 실행을 위해서는 자신보다 훨씬 큰 크기의 VM이나 프로그램이 동반해야 합니다.) 

 

 


 

C언어의 미래 (개인적인 의견)

C언어 좋아하는 개발자는 급격하게 줄어들고 있습니다. ※ 참고: 가장 인기 있는 프로그램 언어 1965 ~ 2019 (동영상) 동영상에서 처럼, C언어는 인기있는 프로그래밍 언어의 순위에서는 계속 밀리고 있습니다. 즉, 쉽게 바로 바로 실행할 수 있는 script 언어로 바뀌는 추세입니다.

 

(2019년 2분기 기준)

1. Python     : 23.99%
2. Javascript : 23.12%
3. Java       : 22.48%
4. C#         : 8.44%
5. PHP        : 7.27%
6. C++        : 6.72%
7. C          : 5.39%
......

 

그러나 TIOBE Index for October 2019 (출처: https://www.tiobe.com/tiobe-index/ )에 따르면 실제로 개발을 하는 engineer나 개발 업체 또는 검색 엔진에서 검색하는 량 등에 따르면 아직도 C언어를 많이 사용하고 있습니다.


(2019년 10월 기준)

1. Java   : 16.884%
2. C      : 16.180%
3. Python :  9.089%
4. C++    :  6.229%
5. C#     :  3.860%
 ......

 

현재(2019년), 우리나라의 일반 기업용 업무 개발(SI)에서 C언어를 사용하는 산업 분야는 통신(SKT), 은행, 증권(체결 업무), 카드(결재업무), 게임 등 아주 빠른 성능을 요구하는 산업 분야에서는 아직 사용되고 있습니다. 이들 분야는 향후에 Java, C# 등 다른 프로그래밍 언어로 대체가 이루어질 것으로 보입니다. (Java 언어의 단점인 GC로 인하여 운영중에 긴급하게 프로그램을 배포하면 시스템이 멈추는 현상이 아직 해결되지 않았습니다. 예를 들어, SKT의 경우 대리점이나 T-World 같은 인터넷으로 부터 주시스템으로 유입되는 TPS (Traffic per second)가 5,000 TPS 정도 되는데, 만약 수십 초 가량 멈추게 되면, 멈춘 시간 뿐만아니라 Queue 쌓여진 처리를 하기 위해서도 또 시간을 소비하게 되지만, C언어는 shared library를 변경된 파일만 배포하고 순식간에 교체를 하기 때문에 배포 지연이 없습니다.)

 

C언어를 다른 언어로 대체하기 어려운 분야로는 기기, 장비들에 들어가는 Firmware등의 개발과 로봇, 장비를 제어하는 업무와 고성능 솔루션 개발 등이 있습니다. 요즘은 IoT(Internet of Things) 개발에 사용하는 아두이노의 개발 tool이 C언어입니다. 이 들 분야는 아주 작은 메모리와 빠른 성능을 요구하고 있으므로 요즘 인기 있는 언어 중에서는 C/C++ 이 외에는 대체가 사실 어렵습니다.  

 

전반적으로 C언어의 사용 비율은 지속적으로 줄어 들겠지만, 완전히 없어지기는 어려울 것으로 보입니다.

 

그러면 C언어를 배워야 하는가? 

배워두면 좋은 것은 당연한 얘기겠지만, 이 부분은 자신이 관심을 가지고 있는 분야에 따라서 결정을 해야 할 것 같습니다. 사실 C언어 자체는 Simple한 구조라 쉽게 배울 수 있는 부분입니다. 그러나 C언어를 활용하여 깊이 있게 사용하다(System Programming)보면 스스로 많은 공부를 해야합니다. C언어는 아주 기초적인 것만 제공해주고 라이브러리 등도 많지 않습니다. C언어로 SI 업무 개발을 한다면, 많은 기능이 필요없고 업무를 이해한다면 쉽게 사용할 수 있을 것입니다. 그 외에 고급 개발을 생각한다면 그 분야에 대해서 많은 공부가 필요합니다. 물론 이런 분야는 다른 언어로는 할 수 없을 가능성도 있습니다. 자신의 향후 방향성을 생각해서 결정이 필요해 보이지만, 개인적으로는 C언어를 배우면 다른 프로그래밍 언어 사용에 많은 도움을 줄 뿐만 아니라 그 언어에 의해서 발생한 문제점에 대해서도 파악할 수 있지 않을까 생각합니다.

 

 

 

 

C Programming Language 문법

1. C 프로그래밍 언어는? 2. C언어 개발 환경 (실습 환경) 3. C언어의 컴파일 과정 4. C 소스 파일 구성 5. 주석문(Comment) 6. 식별자 명명 규칙 7. C 프로그래밍의 시작 - 함수 8. 변수와 상수 (정수형) 9. 변..

www.it-note.kr

 

'C언어 > 문법' 카테고리의 다른 글

6. 식별자 명명 규칙  (2) 2019.10.22
5. 주석문(Comment)  (0) 2019.10.22
4. C 소스 파일 구성  (0) 2019.10.20
3. C언어의 컴파일 과정  (0) 2019.10.20
2. C언어 개발 환경 (실습 환경)  (0) 2019.10.13
1. C 프로그래밍 언어는?  (2) 2019.10.13
블로그 이미지

자연&사람

행복한 개발자 programmer since 1995.

Tag , ,

댓글을 달아 주세요