| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
- binary search
- Two Pointers
- 위상정렬
- 소수
- 알고리즘
- 비트마스킹
- 딕셔너리
- BFS
- deque
- Algorithm
- 투 포인터
- recursion
- 너비우선탐색
- 다익스트라
- 재귀
- ccw
- 큐
- Python
- DP
- 외적
- Bitmasking
- 에라토스테네스의 체
- BOJ
- 백준
- 에라토스테네스
- 비트연산
- dijkstra algorithm
- CCW알고리즘
- 이진 탐색
- CCW 알고리즘
- Today
- Total
꾸꾸리
1. C언어는 무엇일까? 본문
1. C언어는 프로그래밍 언어이다.
사람이 컴퓨터에게 일으키기 위해서는, 컴퓨터와 사람의 대화를 위한 공통의 대화수단이 필요하다.
그러나 컴퓨터는 사람의 말을 이해하지 못하고, 사람도 컴퓨터가 인식하는 기계어를 알지 못한다.
한국인 --> 컴파일러 --> 컴퓨터
(한국어, C언어 가능) (C언어, 기계어 가능) (기계어 가능)
그래서 나온 해결책이 위와 같은 'C언어와 기계어를 이해하는 컴파일러(compiler)' 이다.
[참고]기계어란, 컴퓨터가 이해할 수 있는 0과 1로 구성된 언어체계를 뜻한다. 물론 많은 노력을 통해서 사람도 이러한 언어체계를 습득할 수 있다. 하지만 특별한 목적 없이 이러한 기계어를 익히기 위해서 노력할 필요는 없다.
<컴파일러의 역할>
프로그래밍 언어로 작성한 프로그램을 컴퓨터가 이해할 수 있도록 기계어로 번역하는 역할을 한다.
* 이렇게 번역하는 일 자체를 가리켜 '컴파일(compile)'이라 한다.
2. C언어의 역사와 특징
C언어는 1971년경에 UNIX라는 운영체제의 개발을 위해 데니스 리치(Dennis Ritchie)와 켄 톰프슨(Ken Thompson)이 함께 설계한 범용적인 고급언어다. 하지만, 그 탄생의 배경은 훨씬 이전부터 시작되었다.
ALGOL 60(1960년)을 시작으로 CPL(1963년), BCPL(1969), B언어(1970)에 이르기까지 그 기권을 두고 있으며, 그 후에 탄생한 것이 C언어이다.
( B언어 다음에 등장했다는 것이 C언어의 이름의 이유이다. )
기존의 UNIX라는 운영체제는 '어셈블리(assembly) 언어'라는 저급언어로 만들어졌기 때문에 하드웨어의 의존도가 높았다(이를 가리켜 '이식성이 낮다'라고 표현한다). 이는 즉, CPU의 종류가 바뀌면 프로그램을 다시 작성해야만 한다는 것이다. 예를 들어 인텔 CPU를 기반으로 구현된 프로그램은 AMD 기반의 시스템에서 동작하지 않았다. 때문에 똑같은 기능의 프로그램이라도 CPU의 종류에 따라서 별도로 구현해야했다.
이러한 단점을 해결하기 위해서, 더불어 활용에 제약이 많이 따르는 어셈블리 언어의 대체를 위해서, 어셈블리 언어의 저급 언어적 특징을 지니면서도 이식성도 좋고, 더불어 익히기도 쉬운 언어가 필요했는데, C언어는 이러한 요구조건을 모두 만족하였다. 결과적으로 C언어의 개발로 인해서 UNIX라는 운영체제의 90%이상이 C언어로 대체되었고 이를 시작으로 C언어의 인기는 더욱 더 높아져갔다.
[참고] '저급언어'와 '고급언어'의 구분기준은 컴퓨터가 이해하기 쉬운 언어냐, 아니면 사람이 이해하기 쉬운 언어냐에 달려 있다.
즉, 고급언어에 가까울수록 사람이 이해하기 쉬운 언어가 되고, 저급언어에 가까울수록 사람보다는 컴퓨터가 이해하기 쉬운 언어가 된다. 또한 각각의 언어가 지니는 장단점도 다르기 때문에, 무조건 고급언어가 저급언어보다 좋다고 판단하는 것은 무리가 있다.
* 질이 낮아서 저급언어가 아닙니다!
저급언어라는 표현은 Low-Level 의 번역결과로, 앞서 설명했듯이 인간보다 컴퓨터에 더 가까운 언어라는 뜻을 지닌다.
3. C언어의 장점
프로그래밍 언어의 역사를 보면 많은 언어들이 소멸되어왔음을 알 수 있다. 특히 객체지향을 등에 업고 새롭게 탄생하지 않으면 조금씩 잊혀지는 경우도 쉽게 볼 수 있다. 그럼에도 불구하고 객체지향과는 거리가 먼 C라는 프로그래밍 언어는 그 놈의 인기가 식을 줄을 모른다.
C언어의 인기비결은 몇 줄에 걸쳐 정리할 수 있는 내용이 아니다. 그래도 여기서 C언어의 장점을 간단히 정리해보고자 한다.
가벼운 마음으로 읽기 바란다!!
(1) C언어는 절차지향적 특성을 지닌다. 때문에 익숙해지는데 오랜 시간이 걸리지 않는다.
여기서 말하는 절차지향에는 '정해진 순서의 실행흐름'을 중시한다는 의미가 담겨있다. 즉, 절차지향 프로그래밍에서 중심이 되는 것은 '순서'이다. 그렇다면 절차지향적 특성의 C언어에 익숙해지는데 오랜 시간이 걸리지 않는 이유는 무엇일까?
이는 인간의 일반적인 생각방식은 절차지향에 가깝기 때문이다.
즉, '아침에 일어나면 세수를 하고, 그 다음엔 식사를 한다. 그러고 나서 옷을 갈아입고 등교를 한다.' 와 같은 방식으로 생각을 한다는 것이다.
따라서 C언어를 처음 접하는 사람도 조금만 공부하면 쉽게 익숙해질 수 있는 것이다.
(2) C언어로 작성된 프로그램은 이식성이 좋다.
앞에서도 간단히 언급했지만, C언어로 작성된 프로그램은 CPU의 종류에 상관없이 실행이 가능하고, 운영체제의 차이에도 덜 민감하다.
(3) C언어로 구현된 프로그램은 좋은 성능을 보인다.
이 세번째 장점은 절대적인 것은 아니다. 언어의 특성보다 중요한 것이 만드는 방법이기 때문이다.
즉, 어떻게 만드냐에 따라서 성능은 달라질 수 있다. 하지만 기본적으로 C언어는 성능에 민감한 소프트웨어의 개발에 주로 사용된다. 사용하는 메모리의 양이 상대적으로 적고, 속도를 저하시키는 요소들을 최소화한 언어이기 때문이다.
'Programming Language > C' 카테고리의 다른 글
| 3-3. scanf와 C언어의 키워드 (0) | 2018.07.18 |
|---|---|
| 3-2. 변수와 연산자 (연산자) (0) | 2018.07.13 |
| 3-1. 변수와 연산자 (변수) (0) | 2018.07.13 |
| 2-2. 주석 및 printf 함수의 이해 (0) | 2018.07.13 |
| 2-1. hello world! (0) | 2018.07.11 |