[프롤로그] 관우는 왜 C 언어를 살육했나?

관우의 목표는 C 언어 정복이 아닙니다. 더 좋은 프로그램을 만드는 입문입니다. 오관육참은 유명합니다. 그깟 이름없는 관병 살육이 뭐 대수겠습니까? 더 큰 꿈을 위해 가는 과정일 뿐입니다. 그래서 관우는 C 언어를 살육했습니다. 더 좋은 프로그램을 만들기 위해… 이 글은 관우의 오관참육을 반면교사 삼아 집필했습니다.

C 언어는 현역으로 뛰는 언어 중에 단연코 최고로 쉽고 간단하고 명확합니다. 그 흔해 빠진 객체지향 개념도 진저리치게 두려운 함수형 기법도 전혀 없습니다. 그래서 모던 언어의 추세에서 동떨어져서 과거의 모습을 간직한 채 묵묵히 그 자리에 있습니다.

그런데 C 언어를 다들 어렵다고 하는 걸까? 현대 프로그래밍에는 다음과 같은 유명한 격언이 있습니다.

프레임워크 위에서 개발하라!

프레임워크는 언어를 쉽게 쓸 수 있게 만든 환경 정도로 이해하고 넘어가겠습니다(더 말하면 복잡해요).

그런데 C 언어에는 보편적인 프레임워크가 없습니다. 언어 자체로 개발을 해야 하는데 문제가 하나 더 있습니다. C 언어는 프로그램이 구동되는 환경에 따른 변수가 많습니다. 8비트 마이컴이나, 32비트 ARM CPU, x86/64 CPU 등 다양한 환경 위에서 동작합니다. 그래서 자료형 크기가 환경에 따라 다릅니다. 환경을 고려해서 코딩해야 하고, 이식도 그런 측면에서 까다롭습니다. 즉 환경을 알아야 합니다.

반면 자바는 자바 가상 머신(java virtual machine) 위에서 자바 애플리케이션이 동작하기 때문에 마이컴이든, ARM이든 프로그래머가 자료형별 크기를 고려할 필요가 없습니다. 이론적으로 한 번 코딩한 코드는 어디서든 똑같이 돌아갑니다. 그래서 상대적으로 C 언어보다 환경에 영향을 덜 탑니다.

하지만 C 언어가 불편하기만 한 것은 아닙니다. 현역으로 뛰는 언어 중에서 가장 간단한 개념만 가지고 있습니다. 바로 절차형 개념만 말입니다. 쉽게 말해서 명령한 순서대로 수행합니다. 그뿐입니다.

오늘날 C 언어의 쓰임은 극히 제한적입니다. 스마트폰이나 PC에서 C로 구현한 애플리케이션을 볼 일이 이 글을 읽는 독자 대부분은 없을 겁니다. 풍성한 라이브러리와 변변한 프레임워크 없이 오늘날 사용하는 복잡한 애플리케이션을 개발하는 일은 어렵습니다. 스위스 군용 칼만 있으면 광화문에 있는 이순신 장군님 동상과 똑같은 동상을 만들 수도 있겠지만 더 좋은 장비가 많은데 스위스 군용 칼만 사용할 필요는 없지 않습니까?

오늘날 C 언어는 극히 제한된 상황을 제외하고는 저수준에서 주로 사용됩니다. 이 글은 이 글의 독자가 C 언어가 쓰이는 저수준 개발에 관련된 사람이라고 생각하지 않습니다. ‘가장 간단한 언어로 프로그래밍 입문에 필요한 개념을 배운다.’ 그것이 이 글의 목표입니다.

이젠 정말로 저수준 개발자가 아니라면 C 언어와 관련된 깊은 이야기는 도움이 되지 못합니다. 어서 기본적인 언어 개념을 익혀 실전에 사용할 다른 언어를 다시 배워야 하는 바쁜 입문자들의 발목을 잡지는 않겠습니다. 시대가 변했습니다.

정말 멋진 디자인은 더 뺄 것이 없는 거라고 합니다.

이 글은 3분만에 해당 주제의 핵심을 파악하도록 돕는 게 목표입니다. 그리고 더 어려운 부가 정보는 선택적으로 보실 수 있게 쓰려 합니다. 그래야 쉽게 3분만에 핵심을 파악하고 하루 빨리 C 언어를 익혀 현업에서 진짜 사용할 언어를 익히고 프로그래밍할 수 있기 때문입니다. C 언어를 창시한 데니스 리치가 브라이언 커니핸과 같이 쓴 『The C Programming』(1978년)을 보셨는지요? 간결하고 명확한 설명, 그것이면 충분합니다.

데니스 리치

하지만 문법만 안다고 한 언어를 안다고 하기 어렵습니다. 문법을 끝내고 여력이 된다면 C 표준 라이브러리 활용 예제도 제공할까 하는데요, 거기까지 이 글을 다 쓸 수 있으려나 모르겠네요.

이 글은 컴파일러를 설치하지 않고 C 언어를 알아갑니다.

아무쪼록 이 글이 빠르고 정확한 프로그래밍 입문에 도움이 되길 바랍니다. (이제 C 언어 참육하러 함께 여행을 떠나 보아요!)