. 실습 과정

이 책에서는 ApiEdit라는 이름으로 텍스트 편집 컨트롤을 만들며 그리고 이 컨트롤을 사용하여 Dangeun(당근)이라는 이름으로 텍스트 편집기를 만든다. 텍스트 편집 기능 자체를 제공하는 컨트롤을 먼저 작성하고 컨트롤을 사용자와 연결하는 호스트 프로그램을 만드는 순서로 되어 있는데, 이는 텍스트 편집 컨트롤의 재활용성을 높이기 위해서이다.

모든 기능을 한꺼번에 작성할 수는 없으므로 큰 기능이 하나씩 추가될 때마다 실습의 단계를 구분하였다. 중간 단계에 해당하는 많은 예제들은 이전 단계의 연속이며 이전 프로젝트의 사본으로부터 출발하도록 되어 있다. 각 단계의 예제는 서로간의 구분을 위해 고유한 일련번호를 붙여 두었다. 하나의 소스로 계속 개발을 하지 않고 중간 단계를 거치는 이유는 각 실습 단계 이후부터 직접 실습해 볼 수 있도록 하기 위해서이다. 예를 들어 다른 기능에는 별 관심이 없거나 이미 잘 알고 있는 상태에서 선택영역 관리방법에 대해서만 집중적으로 실습하고 싶다면 ApiEdit3 프로젝트를 복사한 후 ApiEdit4로 만드는 실습을 하면 된다.

다음에 이 책에서 만들 예제의 목록과 각 예제에서 추가되는 주요 기능들을 정리하였다. 이 목록은 실습의 큰 줄기이며 이외에도 중간중간에 기능의 세부적인 면과 비교를 위한 테스트 예제들을 작성할 것이다. 언제 어떤 기능들이 들어가는지 미리 구경해보자. 일종의 학습 진도표라고 생각하면 될 것 같다.

 

프로젝트

설명

IME1

문자입력. 한글 조립과정 보여주기

IME2

캐럿 보여주기

IME3

캐럿이동 간단한 수정

IME4

메시지크래커 형태로 프로젝트정리

ApiEdit1

여러 편집 기능.

ApiEdit2

자동개행, 수평좌표 저장. 끝과 처음을 구분하기

ApiEdit3

스크롤 처리, 탭문자 지원

ApiEdit4

블록선택, 포커스가 없을 선택영역 숨기기

ApiEdit5

<Ctrl>, <Shift>키와 함께 키보드로 선택하기. 클립보드 처리

ApiEdit6

기능 추가없이 속도개선. 화면 깜박임 제거

ApiEdit7

마진 영역 만듦. 줄번호, 제어코드 보여주기. 북마크 기능.

ApiEdit8

<Shift> 클릭, 마진 드래그, 더블클릭, 선택영역 드래그하여 이동 복사

ApiEdit9

읽기전용 속성. 덮어쓰기 모드. 메모리관리. 휠마우스 지원. 정렬 최적화

ApiEditTest

컨트롤화하면서 함수정리.

Dangeun

MDI 만듦. 리소스 추가 편집기의 기본 코드 완성

Dangeun2

파일 입출력

Dangeun3

설정상태 변경.

Dangeun4

설정값 저장. MRU

Dangeun5

실행취소 재실행

Dangeun6

문법강조

Dangeun7

검색 출력창

Dangeun8

툴바, 상태란, 파일창, 파일탭

Dangeun9

들여쓰기, 삽입, 변환 등의 향상된 편집 기능

Dangeun10

네트워크 지원 프로젝트

Dangeun11

인쇄 최종 코드정리.

Dangeun12

모듈 분할 소스정리. 1.0 릴리즈

 

각 단계의 실행파일은 CD-ROM Exe 폴더에 컴파일되어 있으므로 미리 구경해 볼 겸 직접 실행해보기 바란다. 단계가 올라갈 때마다 기능이 하나 둘씩 늘어나는 것을 직접 확인할 수 있을 것이다. 다음 그림은 이 프로그램의 최종 결과인 Dangeun.exe이며 잠시 후부터 여러분들이 직접 만들어 보게 될 프로그램이다.

색상이나 글꼴, 차일드 윈도우의 배치상태 등은 설정상태에 따라 천차만별로 달라질 수 있다. 비록 예제로 제공되는 프로그램이지만 에디터로서 큰 부족함은 없다고 생각한다. 예제와 익숙해지기 위해 먼저 많이 사용해보기 바란다. 사용하다 보면 이 기능은 어떻게 구현한 것일까?하는 궁금증도 생기게 될 것이고, 이후 작성될 코드도 미리 짐작해 볼 수 있어 실습에 많은 도움이 될 것이다. 소스가 제공되므로 불편한 점이 있으면 물론 직접 수정해도 좋다.

이 책은 프로그래밍에 입문하여 문법은 어느 정도 마스터한 상태에서 실무 코딩을 배우는 사람들을 위해 쓰여졌다. 이런 사람들은 문법은 알지만 아직 코딩은 많이 해 본 경험이 없어 알고 있는 문법을 어떻게 적용해야 할지는 잘 모른다. 즉 글자는 배웠지만 작문을 아직 잘 못하는 상태라고 할 수 있는데 이 단계에서는 이미 만들어진 소스를 보고 기법을 배우거나 아니면 직접 부딪혀가며 코딩해보는 것이 실력향상의 지름길이다. 습작을 만들다 보면 문법공부에 무엇이 부족한지 알게 되고 코딩을 통해 문법을 다시 정리하고 정리된 문법은 다시 코딩에 적용된다.

이런 습작의 재료로 가장 적합한 것은 역시 게임인데 무엇보다 결과가 바로바로 화면에 보여서 실습의 재미를 더한다는 점이 좋다. 게임의 내용은 대체로 단순하기 때문에 치밀한 기획이 없어도 습작 수준의 게임은 쉽게 만들 수 있고 공개된 시나리오가 많은 것도 장점이다. 아마 여러분들도 테트리스나 간단한 슈팅게임 정도는 만들어본 적이 있을 것이다.

게임 습작을 몇 편 만들어본 후 다음으로 만들어 보기에 가장 적합한 예제가 바로 텍스트 편집기다. 과거부터 프로그래밍 교육에 빠지지 않고 채택되는 예제가 텍스트 편집기며 이 책도 텍스트 편집기를 실습 주제로 선택하고 있다. 실무 프로그래밍 습작 예제로 텍스트 편집기를 선택한 데는 다음과 같은 여러 가지 이유가 있다.

 

우선 텍스트 편집기는 응용 프로그램의 가장 전형적인 예로서 프로그램이 갖추어야 할 보편적인 기능들을 모두 포함하고 있다. 내부적인 자료구조 설계, 키보드 입력, 깔끔한 화면출력 등에 대한 기본적인 방법과 블록선택, 클립보드 처리, 설정상태 변경, 파일 입출력 등은 대부분의 프로그램들이 필요로 하는 기능들이다. 즉 텍스트 편집기 제작에 필요한 기법들은 다른 응용 프로그램에 두루 활용되는 일반적인 것들이므로 차후 실무에 많은 도움이 된다.

텍스트 편집기는 내부구조와 외부 인터페이스가 적절히 균형을 이루는 예제로서 어느 한쪽도 소홀함이 없다. 치밀한 자료설계가 뒷받침되어야 제대로 속도가 나오며, 비록 텍스트이지만 화면출력을 위해서는 윈도우즈 GDI의 모든 기능이 총동원되어야 한다. 그래서 텍스트 편집기를 만들어 보면 일반적인 GUI 프로그램의 모든 것을 알 수 있게 된다.

텍스트 편집기는 누구나 사용하며, 또 누구에게나 필요한 보편적인 프로그램이다. 그래서 윈도우즈 사용자라면 텍스트 편집기가 어떤 기능을 가져야 하는지 잘 알고 있으며, 실습목표에 대해 별도로 설명할 필요가 없다. 기획이나 설계과정이 짧기 때문에 코딩실습에 많은 시간을 할애할 수 있다. 워낙 대중적인 프로그램이라 개선의 여지가 많으며 응용실습이 가능한 것도 큰 장점이다.

 

사실 텍스트 편집기보다 더 좋은 실습예제는 워드프로세서다. 자료구조가 좀 더 복잡하고 필요한 기능들이 많기 때문에 경험의 폭이 훨씬 더 넓을 것이다. 하지만 이것은 부피가 너무 크기 때문에 제대로 만들기 어렵고 능력도 부족하여 예제로 채택하기 어려웠다. 워드프로세서는 텍스트 편집기를 만드는 기술을 바탕으로 하므로 여러분들은 이 실습을 마친 후 다음에 꼭 도전해보기 바란다.