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 구성 방식

두 가지 방식

  1. SDI (Single Document Interface)
    → 문서 하나만 다루는 프로그램 (ex. 메모장)
  2. 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" 워크로드를 선택해야 함

📦 빌드 시 구조

  1. .cpp, .h 파일 → 컴파일
  2. 리소스 파일 (.rc, .dlg, .ico) → 컴파일
  3. 링커가 실행 파일 .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 비교" 같은 글도 만들어 드릴 수 있습니다 😊