더북(TheBook)

2.3.1 MFC 클래스들 간의 상관 관계

Visual C++를 이용하여 새로운 프로그램을 만들 경우 기본적인 프로그램 소스 코드는 MFC 응용 프로그램 마법사가 자동으로 만들어주기 때문에 사용자는 자신이 원하는 기능에 대한 코드만 추가하면 된다. 그러나 새로운 기능을 추가하기 위해 기존 소스 코드의 어느 위치에 어떤 코드를 추가해야 하는지 알아내는 것이 만만치 않다. 그러므로 MFC 응용 프로그램 마법사가 생성해주는 코드들을 구석구석 이해하는 작업이 필요하다. 아마도 MFC 응용 프로그램 마법사가 만들어준 코드에 대해서는 매우 고맙게 생각하면서도 막상 생성된 코드들을 보면 “이 코드들이 무슨 의미일까?”하는 반응을 보이는 사람이 적지 않을 것이다. Visual C++ 프로그래밍을 해봤다는 사람들 중에서도 기본적인 코드를 이해하지 못해서 자신이 원하는 형태로 프로그램을 수정하는 데 어려움을 겪는 사람들이 많다. 이 책이 Visual C++ 입문서는 아니므로 여기서는 당장 영상 처리 프로그램을 만들기 위해 꼭 알고 있어야 하는 내용만 선별하여 설명할 것이다. 다소 설명이 어렵게 느껴지더라도 한 번은 차분하게 읽어보기 바란다.

MFC 프로그램은 클래스 단위로 구성되므로 각각의 클래스를 분석하는 것이 코드 분석의 시작이라고 할 수 있다. 2.2절에서 만든 First 프로젝트에는 다음과 같은 클래스들이 포함되어 있다.

CFirstApp

CMainFrame

CChildFrame

CFirstDoc

CFirstView

CAboutDlg

이 클래스들은 각각 MFC에 미리 정의되어 있는 클래스들로부터 상속받아서 만들어진다. 그림 2-31은 각 클래스들의 상속 관계를 계층적으로 보여준다. 이 중에서 CAboutDlg 클래스는 First 프로그램의 핵심 클래스가 아니기 때문에 그림 2-31에서는 표현하지 않았다. 참고로 CAboutDlg 클래스는 MFC 클래스 중 CDialogEx 클래스로부터 상속을 받는다.

그림 2-31 기본 생성 클래스들의 상속 관계

그림 2-31에서 좌측 상단에 있는 CObject라는 이름의 클래스는 MFC에서 사용되는 대부분의 클래스의 최상위 클래스이다. 그 아래 CCmdTarget 클래스는 메뉴 등에서 발생하는 명령command의 전송을 담당하는 클래스이다. 그러므로 CCmdTarget으로부터 상속받아서 만들어진 클래스들은 모두 메뉴 명령을 처리하는 능력을 가지고 있다. CCmdTarget 클래스의 하위 클래스에는 CWinApp, CDocument, CWnd 등의 클래스가 있으며 이 클래스들로부터 상속을 받아 실제 First 프로젝트에서 사용되는 클래스들이 만들어지게 된다. 즉, CFirstApp 클래스는 CWinApp 클래스로부터 상속받아 만들어지고, CFirstDoc 클래스는 CDocument 클래스로부터 상속받아 만들어진다. CMainFrameCChildFrame 클래스는 CFrameWnd 클래스의 자식 클래스인 CMDIFrameWndCMDIChildWnd 클래스로부터 각각 상속받아 만들어진다. CFirstView 클래스는 CView 클래스에서 상속받아서 만들어진다.

그림 2-31에서 CFirstApp 클래스와 CFirstDoc 클래스는 CWnd 클래스를 상속받아 만든 클래스가 아님을 확인할 수 있다. CWnd 클래스는 화면에 나타나는 일반적인 윈도우를 표현하는 MFC 클래스이다. 그러므로 CFirstApp 클래스와 CFirstDoc 클래스는 First 프로그램 실행 시 화면에 나타나지 않으며 내부적인 데이터 처리만을 담당한다. 또한 이 두 클래스는 CWnd 하위 클래스가 아니므로 WM_로 시작하는 윈도우 메시지를 처리할 수 없다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.