MFC MDI 인터페이스 구성 방법과 핵심 개념 완전정복
🖥️ 하나의 프레임에 여러 문서를 띄우는 다중 문서 인터페이스의 구조를 쉽게 이해해보세요
C++ 기반 데스크탑 애플리케이션을 개발하는 분들이라면 MFC(Microsoft Foundation Class) 구조에 대해 한 번쯤 들어보셨을 텐데요.
그중에서도 MDI(Multiple Document Interface)는 하나의 메인 프레임 창에 여러 개의 하위 문서를 동시에 띄워서 관리할 수 있는 매우 실용적인 인터페이스입니다.
워드 프로세서나 그래픽 툴 등 다양한 프로그램에서 활용되는 구조죠.
이 글에서는 MFC에서 MDI 인터페이스를 어떻게 구성하는지에 대해 구조적 개념부터 생성 절차, 핵심 클래스, 활용 예시까지 단계별로 상세히 소개해드릴게요.
Visual Studio에서의 실습과 함께 따라 하기 쉬운 설명으로 구성했으니, MDI 구조에 대해 처음 접하시는 분들도 문제없이 이해하실 수 있습니다.
📋 목차
📌 MDI란 무엇인가요?
MDI(Multiple Document Interface)는 하나의 메인 윈도우(프레임) 안에서 여러 개의 서브 윈도우(문서 창)를 동시에 열고 관리할 수 있는 구조입니다.
예를 들어, 여러 개의 문서를 동시에 편집할 수 있는 워드 프로세서나 이미지 편집 프로그램에서 주로 사용됩니다.
MFC에서는 이 구조를 지원하기 위해 CMainFrame, CChildFrame, CDocument, CView와 같은 클래스를 기반으로 구성됩니다.
사용자는 메인 프레임 안에서 새로운 문서를 열거나 저장, 편집 등을 할 수 있으며, 각각의 문서 창은 독립적으로 관리되면서도 하나의 프로그램 윈도우 안에서 동작합니다.
- 🪟하나의 프로그램 창 내부에서 여러 문서 창을 동시에 띄움
- 📂각 문서는 독립된 뷰로 작동하면서도 메인 프레임의 관리하에 있음
- 🧩MFC의 프레임워크와 밀접하게 연동됨
💎 핵심 포인트:
MDI는 하나의 응용프로그램에서 여러 작업을 병렬로 수행할 수 있도록 돕는 유용한 UI 패턴이며, 특히 편집기나 도면 툴 등에서 필수적으로 사용됩니다.
🏗️ MFC에서 MDI 인터페이스 생성 흐름
MFC에서 MDI 인터페이스를 구성하려면 Visual Studio의 MFC App Wizard를 활용하는 것이 일반적입니다.
프로젝트를 생성할 때 “Multiple documents”를 선택하면 기본적인 MDI 구조가 자동 생성되며, 이후 필요한 기능들을 추가로 구현해 나가게 됩니다.
기본 구조는 메인 프레임(CMainFrame) 안에 여러 개의 자식 프레임(CChildFrame)이 생성되며, 각 프레임은 문서(CDocument)와 뷰(CView)를 연결하여 개별 작업이 가능합니다.
이러한 구조는 Document/View 아키텍처에 기반합니다.
- 🧱MFC App Wizard로 프로젝트 생성 시 Multiple documents 선택
- 📄CDocument ↔ CView 구조를 기반으로 데이터와 UI 연결
- 🪟CMainFrame → CChildFrame 구조로 창 관리
💡 TIP: AppWizard의 기본 설정을 잘 살펴보면, 자동 생성되는 클래스 구조와 파일의 역할을 쉽게 파악할 수 있어 추후 커스터마이징에 유리합니다.
🧩 핵심 클래스와 역할 정리
MFC의 MDI 구조는 몇 가지 핵심 클래스 간의 명확한 역할 분담을 통해 구현됩니다.
각 클래스는 문서-뷰(Document/View) 아키텍처를 중심으로 서로 연결되며, 기능별로 구분된 역할을 수행합니다.
아래는 주요 클래스와 그 기능에 대한 요약입니다.
| 클래스 | 역할 |
|---|---|
| CWinApp | 애플리케이션 초기화 및 실행 관리 (프로그램 진입점) |
| CMainFrame | 주 프레임 창 구성 및 메뉴, 툴바 관리 |
| CChildFrame | 하위 문서 창 구성 (MDI 문서 창) |
| CDocument | 데이터 처리 및 저장/불러오기 로직 구현 |
| CView | 문서 데이터를 화면에 출력하고 사용자 입력 처리 |
이처럼 각 클래스는 역할이 명확히 분리되어 있어 유지보수나 기능 확장에 유리합니다.
특히 MFC의 구조를 처음 접하시는 분들은 이 관계도를 명확히 이해하는 것이 매우 중요합니다.
💎 핵심 포인트:
MFC MDI 구성의 핵심은 CDocument와 CView의 연결이며, CChildFrame은 이러한 뷰들을 창 단위로 담는 역할을 수행합니다.
📝 실제 프로젝트 예제 적용
MFC MDI 구조를 실전에 적용해보면 이해가 훨씬 빠릅니다.
Visual Studio에서 MFC App Wizard로 MDI 기반 프로젝트를 생성하고, 아래와 같은 단계를 통해 실제 문서-뷰 구조를 구성할 수 있습니다.
예를 들어, 다중 텍스트 편집기를 구현하는 경우라면 각 CChildFrame 창에서 CView를 통해 개별 텍스트 문서를 열 수 있으며, 메뉴를 통해 새 문서를 생성하거나 기존 문서를 불러와 다중 작업 환경을 구현할 수 있습니다.
- 🛠️App Wizard에서 “Multiple Documents” 선택 후 프로젝트 생성
- 📄CDocument에서 OnOpenDocument, OnSaveDocument 등을 활용해 파일 입출력 구현
- 🖼️CView에서 OnDraw 함수를 재정의해 데이터 출력 처리
- 🪟CChildFrame은 뷰 컨테이너로써 창 UI 역할 담당
💡 TIP: 기본 MDI 템플릿은 Ctrl+N으로 새 문서 생성, Ctrl+O로 열기 등 단축키도 자동 구성되어 있어 빠른 테스트에 유리합니다.
⚙️ SDI와 MDI의 차이점 비교
MFC에서는 두 가지 주요 문서 인터페이스 구조를 제공합니다.
하나는 SDI(Single Document Interface), 다른 하나는 MDI(Multiple Document Interface)입니다.
이 둘은 사용 목적과 UI 구조가 다르기 때문에, 프로젝트의 성격에 따라 적절히 선택하는 것이 중요합니다.
| 구분 | SDI | MDI |
|---|---|---|
| 문서 수 | 한 번에 하나의 문서만 열 수 있음 | 여러 문서를 동시에 열고 전환 가능 |
| 프레임 구조 | 하나의 메인 프레임 | 하나의 메인 프레임 + 다수의 자식 프레임 |
| 사용 예 | 간단한 메모장, 계산기 등 | 텍스트 편집기, 그래픽 도구, 통계 분석 프로그램 등 |
| 복잡도 | 단순하며 구현이 쉬움 | 상대적으로 복잡하고 구성 요소가 많음 |
따라서 프로젝트에서 동시에 여러 데이터를 다뤄야 하거나 멀티탭 환경이 필요한 경우라면 MDI를, 단일 작업 환경이라면 SDI가 적합합니다.
💎 핵심 포인트:
MDI는 멀티태스킹 중심의 전문가용 프로그램에 적합하며, SDI는 단일 기능 중심의 툴에 효과적입니다.
❓ 자주 묻는 질문 (FAQ)
MFC에서 MDI 구조는 어떤 프로젝트에 적합한가요?
SDI와 MDI 중 어느 구조가 더 효율적인가요?
MDI 프로젝트를 Visual Studio에서 어떻게 시작하나요?
MDI에서 각 문서 간의 데이터 공유는 어떻게 하나요?
뷰를 추가로 생성하고 싶을 때는 어떻게 하나요?
ChildFrame 클래스는 꼭 필요하나요?
문서 간 데이터 싱크 처리는 어떻게 하나요?
뷰 클래스를 다양하게 구성할 수 있나요?
🧭 MFC MDI 인터페이스, 구조부터 실전까지 한눈에 정리
MFC 기반 데스크탑 프로그램을 개발할 때, 다중 문서를 효율적으로 관리할 수 있는 구조가 필요하다면 MDI(Multiple Document Interface)는 매우 훌륭한 선택입니다.
이 글에서는 MDI 구조의 기본 개념부터 시작해, 핵심 클래스 구성, 실전 예제 적용, 그리고 SDI와의 차이점까지 단계별로 살펴보았습니다.
MFC App Wizard를 활용하면 기본 골격을 빠르게 구성할 수 있으며, CDocument, CView, CChildFrame 간의 구조를 명확히 이해한다면 다양한 응용 프로그램에 활용할 수 있습니다.
MDI는 문서 중심의 도구, 편집기, 분석 도구 등에서 그 진가를 발휘하므로, 프로젝트의 요구사항에 맞춰 적극 활용해 보시길 추천드립니다.
🏷️ 관련 태그 : MFC, MDI, CView, CDocument, 윈도우프로그래밍, VisualStudio, C++, 다중문서, 소프트웨어구조, 프레임워크, UI구성