C언어
많은 분들이 C언어에 대해서는 들어봤을 것이라고 생각이 된다.
코딩교육을 하면 생각하는 로직(알고리즘)이 달라진다고 하여 코딩교육이 유행하고 있다.
프로그래밍으로 인공지능(AI)을 만들어내 알파고가 바둑을 제패하는 등에 대한 내용이 뉴스에 나오고 있다.
따라서 현재 프로그래밍에 대한 관심이 많아지고 있으며 프로그래밍의 기본이라고 할 수 있는 C언어에 대해 설명하도록 하겠다.
역사
1972년에 벨 연구소(Bell Labs)의 데니스리치(Dennis MacAlistair Ritchie, 1941.9.9~2011.10.12)가 만든 프로그래밍언어이다. UNIX 운영체제 시스템의 기술에 사용할 것을 목적으로 설계한 언어로 UNIX OS의 대부분이 이 언어로 개발되었다. 대표적인 프로그래밍 언어로 대부분의 대학교의 전산과, 컴퓨터공학과, 전자제어과에서 배우고 있다. 프로그래머의 기본이 되는 언어이다.
처음 나올 때는 영국의 캠브리지 대학교에서 CPL이라는 언어에서 BCPL(Basic CPL)이 나오게 되었다. 그 후 미국으로 넘어가게 된다. 미국으로 넘어온 BCPL은 켄 톰슨이라는 벨 연구소 사람이 B언어를 만들게 된다. B언어는 Bell연구소의 B를 따서 B언어라 명명하였다고 한다. 증명되지 않은 사실이지만 C언어라고 만들때 B다음이라 C라고 명명한 것 같다.
특징 및 장점
C언어는 매우 유용하게 사용하고 있는데 운영체제나 언어처리계 등의 시스템 기술에 적합한 프로그래밍 언어이다. 기본적인 프로그램 구조가 기술가능하고, 비트 조작 등 세밀한 기술도 가능하다. 미니컴퓨터용 운영 체제인 유닉스의 대부분은 이 언어로 기술되어 있다. 이식이 용이하고 기계어 명령에 가까운 유형으로 직접 기술할 수 있고 풍부한 표준라이브러리를 가지고 있다.
C 언어의 기본 특징은 ASCII코드 체계로 영문 소문자 집합을 바탕으로 하고 있으며, 함수(function)의 정의문들의 집합으로 구성되어 있고, 분할 컴파일을 할 수 있어 함수 정의부 밖의 외부 변수를 정의함으로써 컴파일 단위가 다른 함수의 외부 변수를 참조할 수 있게 되어 있다. 또한 프로그램의 함수 기능에는 FORTRAN의 SUBROUTINE 기능과 FUNCTION 기능을 가지고 있으며, 함수 호출 시 매개변수의 값만 넘겨주는 호출 방식을 따르고 있고, 자료의 주소를 자유롭게 조작할 수 있는 점들이다.
시스템 기술용 언어의 경우에는 기억장치의 주소(어드레스) 등과 같은 하드웨어 자원까지 기술의 대상으로 할 것을 요구하고 있는데, C언어에서는 이러한 수준의 개념을 데이터 형이나 함수 등의 고수준 언어의 개념에 잘 대응하고 있다. 기억장치의 주소를 직간접적으로 사용할 수 있으며 필요에 따라 메모리할당까지도 할 수 있으니 시스템프로그래머라면 기본적으로 배워야 할 언어이다. 따라서 언어의 성격상 일반적인 범용의 언어와 거의 다를 바가 없다. 프로그램을 다른 종류의 컴퓨터에 이식하는 것도 용이하며, 범용 언어이기는 하지만 강력하고 고수준의 언어로 하는 것을 목표로 하고 있지 않다.
이러한 C의 특성 덕분에 많은 대학교에서 기본과정으로 1학년 혹은 2학년 때 배우는데 사실 처음 배우는 입장에서 왜 배우는지조차 모르고 따라하기 바쁠 뿐이다. 어플리케이션 레벨의 컨트롤을 할 수 있는 JAVA와 같은 고수준의 언어와는 다르게 OS에 사용되고 호환이 가능하기 때문에 low-level에 대한 직관적인 코딩을 할 수 있으며, 기본적으로는 프로그래밍에 대한 개념 과 알고리즘에 대해 알 수 있는 장점이 있다.
현재는 유행이 바뀌고 있는 추세인지 좀 더 응용이 가능한 파이썬(Python)이나 JAVA를 더 많이 배우는 것 같다. 기초적인 부분들을 C언어, 파이썬, JAVA를 사용해 보았으나 시스템이나 마이크로컨트롤러와 같은 프로그래밍을 하기 위해서는 C언어가 필수적으로 필요하다. 특히나 비트연산과 같은 아주 low-level을 이해하고 로직을 짜기 위한 기능들을 제공한다. 그만큼 강력한 기능을 가지고 있다.
마무리
C언어에서 가장 어렵다고 생각되는 부분은 배열과 포인터정도가 될 것 같다. 물론 다른 어려운 것들도 있지만 나머지는 몇 번정도 실습을 하다보면 완벽히 쓸 수 있고 이해하기가 쉽다. 많이 양보해서 배열까지도 공학수학을 배웠다면 충분히 이해할 수 있고 쓰면서 할 수 있다. 하지만 포인터는 꽤 많은 시간동안 이해하려 노력했으나 이제서야 감이 잡혀간다. 머리가 좋다면 한 번만 듣고도 이해가 되겠지만 평범한 사람은 한번들어서 이해하기 힘들다고 생각된다. 또한 Linux환경에서 C언어로 예제를 실습할 수 있도록 하겠다.
'IT > 프로그래밍' 카테고리의 다른 글
배쉬(Bash) 쉘 스크립트 프로그래밍 기초2 - 변수 (0) | 2018.07.22 |
---|---|
리눅스(Linux) 배쉬,bash 쉘 스크립트 프로그래밍 기초 (0) | 2018.07.21 |
C언어 Printf함수와 출력타입 (0) | 2017.10.03 |
파이썬(Python)의 역사와 특징에 대하여 (2) | 2017.07.23 |
C언어 기초 - 컴파일러 및 자료형 (0) | 2017.07.22 |
댓글