.실습의 의미

프로그래밍을 공부해 사람들은 이미 느꼈겠지만 문법을 아는 것과 프로그래밍을 하는 것은 별개의 문제이다. 문법은 복잡해 봐야 반복을 통해 읽고 듣고 공부를 하면 대개의 경우 이해할 있으며 그리고 솔직히 그다지 복잡할 것도 없어서 안되면 깡그리 외워 버리는 작전을 수도 있다. 그러나 추상적인 사람의 요구를 컴퓨터가 알아들을 있는 일련의 명령 집합으로 기술하는 프로그래밍이란 그리 쉽게 익숙해지지 않는다. 수많은 시행 착오와 다년간의 경험이 뒷받침되지 않고서는 원하는 바를 모니터위에 바로 구현시키기가 만만치 않다. 어쩌면 그래서 프로그래밍이 배울만한 것인지도 모르겠는데 쉽게 얻어지는 것중에 가치있는 것은 없기 때문이다.

프로그래밍을 하려면 베테랑들이 작성한 소스를 수없이 분석해 보고 자신이 직접 습작을 많이 만들어 봐야 한다. 스스로 프로젝트를 구현하는 경험을 통해 얻어진 기술은 그야말로 지식이며 완전한 자기 것이라고 있다. 하지만 입문자의 실습을 방해하는 수많은 함정들이 있어 대개의 경우 습작 과정이 순탄치 못하며 또한 어느 정도의 절대적인 시간을 요구하기 때문에 과정에서 예비 개발자들은 지성과 체력을 소모하여 결국 KO패를 당하는 경우가 허다하다.

ApiDraw 프로젝트는 이런 과정에 있는 개발자들을 위해 마련된 단계별 실습 프로젝트이다. 파워 포인트나 비지오와 유사한 백터 드로잉 프로그램이며 전형적인 GUI 응용 프로그램으로서 그래픽 환경에서 필요한 기능들 대부분을 구현하고 있다. 프로젝트를 직접 만들어 보는 과정에서 C 문법적 장치가 어떻게 적용되며 API 함수들이 어디에 어떻게 적절하게 사용될 있는지를 경험해 보고 일반적인 문제들을 해결하는 원론적인 방법들을 배울 있도록 구성했다. 어디까지나 교육을 위해 의도적으로 작성한 프로젝트이므로 최종 프로그램의 완성도나 호환성 따위는 고려하지 않았으므로 학습용으로만 사용해야 한다.

모두 11개의 단계로 구성되어 있으며 처음부터 쉬운 순서대로 기능을 하나씩 만들어 가면서 최종적으로 완성된 프로그램을 작성한다. 최종 예제인 ApiDraw11 소스를 지금 분석해 본다면 아마도 너무 복잡해서 이해하기 어려울 것이며 설사 이해한다고 하더라도 기능이 구현된 과정은 없을 것이다. 그래서 처음부터 MDH 공법으로 처음부터 모든 것을 같이 실습해 보기로 한다. 과정은 이전 과정의 사본으로부터 출발하도록 되어 있으므로 중간 단계의 실습을 쉽게 반복해 있도록 했다.

프로젝트는 윈도우즈 환경에서 C언어로 구현되며 그래서 C문법과 API 대한 기초적인 이해가 선행되어야 실습을 원활하게 진행할 있다. 만약 C API 대해 아직 기본적인 이해가 되어 있지 않다면 실습을 하는 의미가 없으므로 먼저 C API 공부하고 오기 바란다. 공부를 하는데 있어서 순서는 아주 중요하다. ApiDraw 프로젝트의 단계에서 어떤 기능들이 작성되는지 도표로 간략하게 정리해 보았다.

 

예제

기능

ApiDraw01

마우스로 , 사각, 타원 그리기

ApiDraw02

리소스 준비 메시지 크래커 형태로 전환

ApiDraw03

그리기 정보 보관과 화면 복구

ApiDraw04

선택 삭제, 메뉴 관리. 액셀러레이터 지원

ApiDraw05

이동, 크기 변경, 키보드 지원

ApiDraw06

도형의 속성 변경( 굵기, 채움 색상 ). 팝업 메뉴, 앞뒤로 정렬

ApiDraw07

더블 버퍼링을 통한 화면 깜박임 제거

ApiDraw08

안내선 기능, 툴바 붙이기

ApiDraw09

텍스트 , 비트맵, 메타 파일 추가

ApiDraw10

파일 입출력

ApiDraw11

클립보드 지원. 기타 잔손질

 

단계의 실행 파일이 제공되므로 순서대로 실행해 가면서 어떤 기능들이 작성되어 있는지 구경해 보도록 하자. 그리고 이런 기능을 직접 구현해야 한다면 어떤 방식으로 문제를 해결할 것인지도 고민해 보자. 실습의 목적은 벡터 드로잉 툴을 만드는 것이 아니라 프로젝트 과정에서 고민과 시도를 통한 경험의 획득이므로 목적에 부합하기 위해서는 많은 생각과 연습을 해야 한다.

그래서 실습을 진행하는데는 어느 정도의 절대적인 시간이 걸릴 것이다. 너무 성급하게 마음먹지 말고 충분한 시간을 투자하여 천천히 실습을 진행하도록 하자. 비록 실습 시간이 오래 걸릴지라도 혼자서 시행착오를 겪어가면서 터득하는 것보다는 훨씬 빠르고 확실한 방법이 것이다. 프로젝트는 차후 C++ 객체 지향 기법으로 다시 작성되는 OopDraw 기초가 된다. 아무리 객체 지향이 좋다 하더라도 구조적 프로그래밍 기법 위에서 성립되는 것이므로 실습을 가볍게 보아서는 안된다.

같이 배포되는 파일 중에 ApiDraw.txt 파일이 있는데 파일에는 단계별로 추가해야 코드가 순서대로 작성되어 있다. 가급적이면 코드를 직접 입력하면서 실습을 진행하는 것이 좋겠지만 한꺼번에 너무 많은 양을 입력할 때는 시간도 많이 걸릴 뿐만 아니라 오타로 인해 실습에 방해가 있으므로 파일에서 코드를 붙여 넣어가며 실습을 진행하기 바란다. , 코드가 여기에 들어가며 어떤 기능을 하는지 생각해 가면서 붙여 넣기를 해야지 기계적으로 베끼기만 한다면 별다른 도움이 되지 않을 것이다.