티스토리 뷰
프로그래밍을 C언어로 시작하는 분들은 한편으로는 가장 핵심적이면서도 기반 기술이 되는 프로그래밍 언어를 배운다는 장점이 있는 반면 "개발자를 위한 프로그래밍 언어"라는 별명에서 유추할 수 있는 것과 같이 컴퓨터 시스템에 대한 배경 지식을 가지고 있는 "개발자"가 아니라면 재미없고 복잡한 마치 "암호"와 같은 언어가 될지도 모르겠습니다. C언어를 처음으로 접한지 어언 20여년이 지나가고 있는 세월이지만 그 때나 지금이나 C언어는 "단순함"과 "자유로움", 그리고 무한한 "확장성"을 두고 개발자를 위한 프로그래밍 언어라 하지 않았나 생각합니다.
C언어를 비롯해서 파이썬(Python), Java, C++, C#, Visual Basic등을 비롯한 프로그래밍 언어와 PHP, ASP, JSP, JavaScript, VB Script, Ruby 등의 웹 연관 언어까지 다양한 프로그래밍 언어가 있지만 프로그래밍 언어를 배우기 시작할 때 가장 많이 실패하는 부분은 바로 "언어"와 "시스템"을 구분하지 못하고 두가지를 한꺼번에 이해하려고 하는 시도가 아닌가 싶습니다. 외국어를 배울때 알파벳, 단어, 문장을 차례로 익힌 다음 각 나라별 문화나 생활 속의 언어를 실제로 익혀가듯이 프로그래밍 언어도 컴퓨터와 대화 할 수 있는 기본 문법을 익힌 다음에 화면, 키보드, 네트워크, 저장장치, 외부 장치등 다양한 시스템에 대한 활용법을 익혀야 합니다.
프로그래밍 언어는 결과적으로는 사람이 컴퓨터에 일을 시키기 위한 도구로 사용하는 것이라 할 수 있는데 일을 하는 "컴퓨터"는 구체적으로는 중앙처리장치(CPU)를 지칭합니다. 초기 퍼스널 컴퓨터(PC)에 사용하던 Z80부터 80386, 80486, 펜티엄, i5 최근에는 스마트폰에 많이 채용하고 있는 ARM 프로세서까지 다양한 CPU가 존재하고 있습니다. 이러한 다양한 CPU는 나름의 명령 체계를 가지고 있어서 해당하는 명령 체계로 만들어진 프로그램만이 CPU가 적절하게 동작하도록 지시할 수 있습니다. CPU가 스스로 사람의 말을 듣고 처리하면 좋겠지만 CPU는 0과 1로 이루어진 디지털 신호로 동작하는 기계이므로 CPU가 인식할 수 있는 명령 체계로 구성된 프로그램을 만들어야 합니다. CPU가 인식할 수 있는 명령 체계를 기계어(Machine Language)라 합니다. 기계어는 메모리이동, 비교, 기본 연산, 분기등 아주 낮은 레벨의 기능만을 가지고 있기 때문에 이런 기능으로는 사람의 일상 생활에서 일어나는 다양한 일을 대신하거나 자동화하기에는 한계가 있습니다. 그래서 등장한 것이 사람이 사용하는 자연어(Natural Language)와 CPU가 인식할 수 있는 기계어(Machine Language)를 이어주는 프로그래밍 언어(Programming Language)이고 그중에 하나가 C언어입니다.
프로그래밍 언어를 CPU가 인식할 수 있는 기계어로 제작하는 과정을 빌드(Build)라 하는데 프로그램 빌드의 과정은 일반적으로 소스 코드를 오브젝트 파일(Object file)로 전환하는 컴파일(Compile) 과정과 오브젝트 파일과 라이브러리 등의 파일을 조합하여 실행 파일로 제작하는 연결 및 편집(Link and Edit) 과정으로 이루어집니다. 빌드 전체 과정을 주관하는 도구를 빌더(Builder) 또는 메이커(Maker)라하고 컴파일을 수행하는 도구를 컴파일러(Compiler), 연결 및 편집을 수행하는 도구를 링커(Linker)라 하는데 3가지를 각각 독립적인 프로그램으로 제공하기도 하고 컴파일러와 링커를 통합한 형태나 3가지 도구를 통합해서 단순하게 도구를 만든 경우도 있습니다. C언어 배우기의 시작은 결과적으로 어떤 도구를 선택하는가? 하는 고민으로 출발한다고 해도 과언이 아닙니다. 강사가 이미 컴파일러를 지정한 경우라거나 회사에서 사용하는 도구가 표준화되어 있는 경우에는 이미 사용해야 할 도구가 정해져 있으므로 선택의 여지가 없지만 그렇지 않은 경우라면 실제 사용할 프로그램 제작 이전의 학습 과정이라면 다음과 같은 기준으로 도구를 선택할 필요가 있습니다.
사용에 제한이 없는 프로그램인가?
상용 프로그램을 굳이 선택할 필요는 없습니다. 오픈 소스로 기업에서도 사용할 수 있는 도구가 많습니다.설치 과정이 복잡하거나 별도의 사용법을 익혀야 하는가?
레지스트리를 손대거나, 추가적인 프로그램을 설치하는 등 덩치가 큰 도구는 학습 과정에서는 배제하는 것이 좋습니다. 폴더에 압축을 해제하는 정도의 설치 과정과 폴더만 삭제하면 흔적도 없이 사라지는 가벼운 도구를 추천합니다.특정 플랫폼에 종속적이지는 않은가?
학습 과정에서 작성한 프로그램을 다른 플랫폼에서도 사용할 수 있는지 확인이 필요합니다. 예를 들어 윈도우에서 작성한 C 언어 소스를 강사용 리눅스에서 돌리지 못한다면 문제가 될 수 있다는 것입니다.
위와 같은 기준에서 추천할 만한 도구는 TCC Tiny C Compiler(http://bellard.org/tcc/)입니다. 가장 간편한 C언어 학습 환경 준비와 컴파일 방법 글에서 이미 추천해 드렸는데 TCC는 사용에 제한이 없고 압축 해제만 하면 설치가 끝날 뿐만 아니라 레지스트리나 기타 시스템 자원을 손대지 않는 깔끔한 도구입니다. 또한 프로그램을 제작하는 과정도 컴파일과 링크 과정을 한번에 끝내는 단순함이 매력이며 별도의 프로젝트 파일이나 오브젝트 파일등을 남기지 않는 아주 깔끔하고 빠른 프로그램 제작 과정을 보입니다. 윈도우에서 TCC로 컴파일했던 C 소스 코드는 TCC가 ISOC99 표준을 준수하기 때문에 다른 플랫폼에서 활용하는데도 무리가 없습니다. 가장 간편한 C언어 학습 환경 준비와 컴파일 방법 글을 참조하셔서 TCC를 C 드라이브 루트 폴더 아래 C:\TCC에 설치하고 다음과 같이 설치 확인을 수행할 수 있습니다.
콘솔 창을 엽니다.(시작>실행에서 cmd, 또는 윈도우+R에서 cmd) codes라는 폴더를 생성한 다음 codes 폴더로 이동하여 "..\tcc"를 입력하고 엔터를 눌러서 아래의 그림과 같은 tcc 옵션 목록이 나오면 C언어 배우기를 위한 도구는 준비가 된 것입니다.
C언어 컴파일을 위한 도구가 준비되었으면 마지막으로 필요한 환경은 C 소스 코드 작성을 위한 텍스트 편집기입니다. 비주얼스튜디오, 넷빈즈, 이클립스와 같은 통합 개발 환경을 사용하는 경우에는 텍스트 편집기와 빌더, 컴파일러등이 모두 통합되어 있으므로 별도의 텍스트 편집기의 필요를 덜할 수 있지만 이런 통합 개발 환경을 사용하지 않는 경우에는 텍스트 편집기가 반드시 필요합니다. 리눅스나 유닉스의 경우에는 vi나 emacs와 같은 도구를 사용할 수 밖에 없는 경우도 있으므로 통합 개발 환경에 너무 의존적이지 않는 것도 필요합니다. C언어 학습을 위한 편집기로 윈도우의 메모장을(윈도우+R, notepad) 사용할 수도 있습니다. 메모장을 사용하는 경우에는 소스 코드를 저장할 때 아래의 그림과 같이 파일 형식을 *.txt 대신 "모든 파일"로 하고 tcc\codes로 이동하여 소스코드의 확장자를 *.c로 하여 저장합니다.
프로그램을 작성할 때 통합 개발 환경이나 프로그램 작성에 도움을 주는 전문 편집기를 사용하는 이유는 해당 도구들이 다양한 핫키나, 자동 완성, 문법을 인식하여 색으로 구분 표시해주거나 자동 들여쓰기(Indentation)등의 기능을 가지고 있기 때문입니다. 좀더 편리하게 C 소스 코드를 작성하고 싶으시다면 프로그래머를 위한 jEdit 텍스트 편집기를 추천합니다.(jEdit,텍스트편집 를 클릭해 보세요) 콘솔창에서의 명령 사용이 익숙치 않으신 분은 간추린 윈도우 콘솔(DOS) 명령 모음 글을 참조하세요.
메모장이나 jEdit를 사용하여 일단 아래와 같은 첫 프로그램을 작성해서 tcc\codes 폴더에 hello.c로 저장합니다.
main() { printf("\n good!"); }
모든 프로그래밍 언어를 배울 때는 위의 프로그램과 같이 간단한 텍스트를 출력하는 것으로 시작합니다. 간단한 프로그램이지만 이 프로그램을 실제로 작성하고 실행하는 과정을 통해서 프로그램 작성, 빌드(컴파일), 실행이라는 프로그램 개발의 모든 단계를 경험해보는 매우 중요한 단계입니다.
프로그램을 작성해서 저장했으면 이전 단계에서 열어 놓았던 콘솔창에서 아래의 그림과 같이 "..\tcc hello.c"로 C 소스 코드를 컴파일하여 실행 프로그램을 생성합니다. 오류 메시지가 있으면 해당 오류를 수정하여 다시 컴파일하고 오류 메시지가 없으면 생성된 hello.exe를 실행하여 결과를 확인하는 것으로 C언어 배우기를 위한 준비를 끝냅니다.
'프로그래밍' 카테고리의 다른 글
C# 반올림, 올림, 버림 사용하기 (0) | 2015.05.20 |
---|---|
어떤 통합 개발 환경(IDE)을 사용할 것인가? (2) | 2015.05.20 |
C# 사용자 정의 컨트롤(Custom control) 만들기 (0) | 2015.05.18 |
숫자를 문자열로 출력하는 형식 다루기 (0) | 2015.05.15 |
간추린 윈도우 콘솔(DOS) 명령 모음 (0) | 2015.05.15 |