MFC의 개념부터 구조, 예제까지 상세하게 정리!
✅ MFC란 무엇인가?
MFC (Microsoft Foundation Class Library) 는
Windows API 기반의 C++ 응용 프로그램을 만들기 쉽게 도와주는 클래스 라이브러리입니다.
📌 정의 한 줄 요약
MFC는 C++ 기반으로 Windows GUI 프로그램을 개발하기 위한 클래스 기반 프레임워크입니다.
🧩 왜 MFC가 필요한가?
Windows에서 GUI 프로그램을 만들기 위해선 원래 Win32 API를 직접 사용해야 합니다.
하지만 Win32 API는:
- 코드가 복잡하고 장황함
- 메시지 처리나 윈도우 핸들 관리가 번거로움
- 초보자가 접근하기 어려움
👉 그래서 나온 것이 MFC입니다.
Win32 API를 객체지향적으로 감싸고, 개발자가 더 쉽게 GUI 프로그램을 만들 수 있도록 도와줍니다.
🏛️ MFC의 구조와 핵심 개념
MFC는 다양한 클래스로 구성되어 있으며, 이들은 각 기능을 모듈화한 것입니다. 주요 구성은 다음과 같습니다.
주요 클래스
클래스 역할
CWinApp | 전체 응용 프로그램을 관리 (프로그램의 시작점) |
CFrameWnd | 메인 윈도우 프레임 생성 |
CView | 화면에 표시되는 내용 처리 (뷰/그리기 등) |
CDialog | 대화상자 기반 GUI 생성 |
CWnd | 윈도우(컨트롤 포함)의 기본 클래스 |
CString | 문자열 클래스 (std::string 대신 사용 가능) |
CButton, CEdit, CListBox 등 | 버튼, 입력창, 리스트박스 등 각종 UI 컨트롤 |
🧪 예제: 간단한 MFC 프로그램 구성 흐름
// MyApp.h
class CMyApp : public CWinApp {
public:
virtual BOOL InitInstance();
};
// MyApp.cpp
BOOL CMyApp::InitInstance() {
CMyMainWnd* pFrame = new CMyMainWnd();
m_pMainWnd = pFrame;
pFrame->Create(NULL, _T("Hello MFC"));
pFrame->ShowWindow(SW_SHOW);
pFrame->UpdateWindow();
return TRUE;
}
이 코드는 MFC 애플리케이션의 기초 구조로, 윈도우 창을 띄우고 메시지를 처리하는 기본 흐름입니다.
🖼️ MFC에서의 GUI 구성 방식
두 가지 방식
- SDI (Single Document Interface)
→ 문서 하나만 다루는 프로그램 (ex. 메모장) - MDI (Multiple Document Interface)
→ 여러 문서를 동시에 다룰 수 있는 프로그램 (ex. 엑셀, 포토샵)
Visual Studio에서 MFC 프로젝트를 만들 때, 이 구조를 선택할 수 있습니다.
🧠 MFC의 핵심 기능들
기능 설명
📩 메시지 맵(Message Map) | 윈도우 메시지를 함수와 연결 (버튼 클릭 처리 등) |
🧱 리소스 기반 UI | 리소스 에디터를 통해 버튼, 대화상자 등 GUI 생성 |
🧾 문서-뷰 구조 | 문서/데이터와 화면/그리기 뷰를 분리하여 구조화 |
🔧 GDI 연동 | 그래픽, 도형, 글씨 그리기 등을 GDI 기반으로 구현 |
💾 파일 입출력 지원 | CFile, CArchive 등 직렬화 지원 클래스 제공 |
📚 데이터 바인딩 | 컨트롤과 변수 연결 기능 (DDX, DDV) |
🛠️ 개발 환경과 빌드
📍 필수 개발 환경
- Microsoft Visual Studio (최소 Community Edition)
- MFC는 Visual Studio에 포함되어 있으나, 설치 시 "C++ MFC for Windows" 워크로드를 선택해야 함
📦 빌드 시 구조
- .cpp, .h 파일 → 컴파일
- 리소스 파일 (.rc, .dlg, .ico) → 컴파일
- 링커가 실행 파일 .exe 생성
🖥️ MFC 프로그램 UI 예시
- 윈도우 창 (Frame)
- 메뉴바, 툴바, 상태표시줄
- 대화상자(Dialog Box)
- 입력창, 체크박스, 리스트박스
- 그림 그리기, 프린터 지원
🎯 MFC의 장점과 단점
장점 단점
✅ Win32 API보다 쉬움 | ❌ 최신 기술 부족 (UI가 구식) |
✅ Visual Studio 연동 훌륭함 | ❌ 크로스 플랫폼 불가능 (Windows 전용) |
✅ 많은 레거시 코드 자산 존재 | ❌ 모던 C++과는 거리 있음 |
✅ 복잡한 GUI 구성도 쉽게 가능 | ❌ 학습 곡선이 있음 (메시지 맵, 리소스 등) |
🔄 MFC는 지금도 쓰이나요?
Yes, 아직도 많이 쓰입니다.
- 기업용 내부 시스템 (유지보수 중심)
- 제조업/산업제어용 UI
- 병원, 공공기관의 윈도우 전용 프로그램
- 레거시 시스템 마이그레이션
👉 특히 MFC로 만들어진 시스템을 유지보수하거나 현대화하는 프로젝트는 여전히 많습니다.
📚 참고 자료
✅ 마무리 요약
항목 내용
MFC란? | C++로 Windows GUI 앱 개발할 수 있게 해주는 프레임워크 |
필요 이유 | Win32 API의 복잡함을 객체지향적으로 해결 |
구성 요소 | CWinApp, CFrameWnd, CView, CDialog 등 |
개발 도구 | Visual Studio (C++ MFC 워크로드 필요) |
장점 | 안정성, Visual Studio 지원, 풍부한 레거시 자산 |
단점 | 현대적 UI 부족, Windows 전용, 러닝 커브 존재 |
혹시 MFC 실습 예제나 Visual Studio로 MFC 프로젝트 만드는 법도 원하신다면 이어서 도와드릴게요!
또는 "MFC vs WinForms vs WPF 비교" 같은 글도 만들어 드릴 수 있습니다 😊