최근 수정 시각 : 2022-08-02 10:57:16

MFC


파일:나무위키+유도.png  
은(는) 여기로 연결됩니다.
다른 의미에 대한 내용은 MFC(동음이의어) 문서
번 문단을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
참고하십시오.
파일:Microsoft 로고.svg
{{{#!wiki style="margin:0 -10px -5px"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin:-6px -1px -11px"
{{{#000,#e5e5e5
산하 계열사 및 사업부
GitHub · .NET Foundation · Xbox Game Studios · LinkedIn
제품군
하드웨어 Surface · Xbox · HoloLens · PixelSense · Zune
소프트웨어 Windows · Office · Edge · Media Player · Hyper-V · Microsoft Defender · Visual Studio Code · Visual Studio · Windows Terminal · Microsoft PowerToys · Internet Explorer · MS-DOS · Windows Movie Maker · Autoruns
서비스 Microsoft Azure · OneDrive · Skype · MSN · Bing · LinkedIn · Cortana · 테이 · Xbox network · 정품 인증 · MSDN
관련 기술 ASF · ASP · Blazor · COM · DCOM · DirectX · 파일 시스템( FAT · NTFS · ReFS) · MFC · .NET( .NET Core · .NET Standard · C# · F# · Visual Basic .NET · Windows Forms · WPF · Universal Windows Platform · ASP.NET · ML.NET) · OLE · Silverlight · Visual Basic · VBA · WASAPI · Windows 커널 · Windows 디자인 · Windows API · Windows Runtime · WMA · WMV · Xamarin · XNA
관련 인물
빌 게이츠(은퇴) · 폴 앨런(은퇴) · 스티브 발머(퇴사) · 게이브 뉴웰(퇴사) · 사티아 나델라 · 필 스펜서
기타
Microsoft의 제니맥스 미디어 인수 · Microsoft의 액티비전 블리자드 인수 · 빌 게이츠의 굴욕
관련 틀
365 제품군 · 하드웨어 제품군 · Surface 제품군 · Windows 제품군
}}}}}}}}}}}} ||

Microsoft Foundation Classes

MSDN의 MFC 페이지

1. 개요2. 사용 목적3. 단점4. MFC 대체 라이브러리

1. 개요

Windows API가 객체지향적이지만 여전히 인터페이스가 C언어 함수여서 쓰기 어려운 점을 개선하기 위해 C++의 클래스로 감싼(Wrapping) 라이브러리로 1992년 발표되었다. 윈도우 환경에서 COM(Component Object Model) 개발을 위한 라이브러리인 ATL(Active Template Library)과 CString 등의 기반 클래스를 공유하는 등 매우 밀접한 관련이 있다.

별도의 라이브러리 또는 프레임워크 없이 윈도우즈용 GUI 응용프로그램을 개발하려면 운영체제가 제공하는 C언어 기반의 Windows API를 써야 하는데, 단순히 운영체제의 여러 기능들을 노출시켜주는 C 함수들의 집합일 뿐이기 때문에 복잡한 UI를 작성하는 등의 고차원적인 작업을 할때에는 필연적으로 코드 노가다가 수반된다. 그리고 최신의 윈도 컨트롤과 같은 고차원적인 기능들은 Windows API가 아닌 COM 라이브러리로만 쓸 수 있기 때문에 Windows API만으로는 한계가 있다. 그래서 이걸 그나마 좀 편하게 클래스 형태로 쓸 수 있도록 해주는 것이 바로 MFC이다.

비주얼 스튜디오의 유료 버전과 Community(개인 사용자용)에는 기본으로 포함되어 있다. 무료인 'Express' 버전에는 MFC와 ATL이 포함되지 않는다. 다만 Express는 2017을 마지막으로 단종되었기 때문에 별 상관은 아니다.

2. 사용 목적

Microsoft Windows용 응용프로그램을 개발하기 위해 사용되었다. C언어 기반의 Windows API를 직접 사용할 수도 있으나, C++언어 기반의 MFC를 사용할 경우 Win32 API로 C 프로그래밍을 하는것보다는 구조적이고 간편하며 규모의 어플리케이션 개발이 용이하다. 현재도 VS에서 C++으로 네이티브 데스크탑 애플리케이션 개발을 선택하면 기본적으로 Windows API와 MFC만 제공된다.

주로 1990년대 초반부터 2000년대 중반 사이의 윈도우즈용 응용프로그램 개발을 위한 라이브러리로 사용되었고[1], 현재는 과거 개발된 어플리케이션 및 라이브러리의 유지보수가 주된 용도이다. 해외의 경우 MFC 개발자 수요가 아직도 약간 있으나 국내에는 MFC 프로그래머에 대한 수요는 유지보수를 제외하곤 없다. .NET Framework를 기반으로 하는 WinForms, WPF 등이 등장하면서 더 이상 신규 개발 프로그램에서 MFC는 효율적인 선택지가 아니게 되었다.

MS에서 개발하는 프로그램 중 Microsoft Office나 윈도 운영체제 자체 등 일반 사용자에게 제공되는 제품은 MFC를 사용하지 않는다. MFC를 사용하여 개발된 것 중 가장 유명한 것은 Visual Studio 6.0에 포함되어 있는 Visual C++ 6.0 IDE일 것이다. 하지만 .NET Framework가 발표되면서 현재의 Visual Studio는 닷넷의 WPF로 개발되고 있다.

3. 단점

  • 비주얼 스튜디오 2022 버전에서도 여전히 사용 가능하나, 메이저 버전업은 비주얼 스튜디오 2015의 MFC 14이 끝이고 마이너 업데이트만 제공되는 상황이다. 사실 닷넷 출시 이후로 MS로부터 버려졌다는 소문까지 있을 정도로, MFC 9(비주얼 스튜디오 2008) 이후로는 큰 변화가 없어진 상태다. 닷넷 이후로는 네이티브 바이너리 애플리케이션 자체가 찬밥 신세지만.
  • 과거에는 델파이 VB에 비해 윈도 응용프로그램 개발기간이 상대적으로 긴 대신 퍼포먼스에 비교적 유리했기 때문에 수요가 많았으나, 현재는 PC의 성능 향상으로 퍼포먼스에 대한 중요성이 떨어져서 반대 급부로 생산성이 더욱 중요해짐에 따라 메리트가 많이 줄어들었다. WinForms, WPF, Electron 같이 개발이 더 편리한 프레임워크가 계속 등장함으로서 현재는 채용 시장에서 순수 MFC 개발자를 찾는 수요가 국내외를 막론하고 많이 줄어들었고, 점점 더 줄어드는 추세이다.
  • 순수하게 C언어로 Win32 API를 사용하여 개발한 프로그램에 비하면 무겁다. 물론 Qt나 GTK+와 비교한다면야...
  • MFC로 개발한다고 해도 Windows API를 직접 이용해야 하는 경우가 가끔 있기 때문에, 실질적으로 둘 다 알아야 효과적으로 개발이 가능하다는 점에서 개발 난이도는 더 올라갈 수밖에 없다.
  • ATL과 공유되는 CString, CList 등의 클래스는 매우 강력하지만, GUI를 위하여 제공되는 기능은 Windows API의 매우 얇은 Wrapper 정도이다.
  • Visual C++ 2008 Feature Pack에서 추가된 리본 인터페이스는 Microsoft Office와 비교해 보면 매우 엉성하고 조잡한 티가 난다. 이는 해당 클래스들이 MS에서 제작된 것이 아니라 타사( #)에서 제작한것을 MS가 구입하여 포함시켰기 때문이다.
  • GUI 디자인 기능이 매우 부실하다. 직접 UI를 그려서 설계할 수 있는 부분은 "윈도 리소스"라는 매우 특이한 형식으로 처리되는 다이얼로그(대화상자)만 가능하며, 일반적인 화면은 직접 코드로 구현해야 한다. VB6.0이나 닷넷의 WinForm/WPF, Qt의 QtDesigner 등과 비교하면 이뭐병 소리가 절로 나온다. 물론 웬만한 C++ 무료 GUI라이브러리가 이런 편집 툴도 없는걸 생각하면 선녀다
  • 지난 몇년 새 MFC에 속한 라이브러리 수가 굉장히 방대해져서 현재는 MS에서 MFC를 유지/개보수하는 AFX 팀에서도 포기했다고 할 정도로 여러 면에서 꼬였다고 한다. MFC 프로젝트를 만들 때 작성되는 설정들이 제대로 설정되지 않는다던지, 리소스를 수정한 후 코드창에서 저장을 하면 리소스 헤더파일의 인코딩이 문제가 된다던지... 각종 오류가 난무하는 중. 이러한 문제로 MS/AFX 팀이 신랄하게 까이지만 그들도 인간인지라 어쩔 수 없는 부분이다.[2]
  • 변화 속도가 느려서 생기는 문제로, HiDPI와 같은 모던 데스크탑 환경의 지원이 부족하다. HiDPI 환경에서 주로 사용되는 Per-Monitor DPI Aware는 기본값이 지원 안 함이라 매니페스트에서 변경해야 한다. MS의 XAML기반 UI나 wxWidgets, Qt와 같은 서드파티 UI 라이브러리들에 비하면 사실상 없다시피한 수준이다.
  • MFC의 클래스/함수/변수들의 네이밍 센스, Visual Studio가 자동 생성해주는 Template들의 구조는 정말 최악이다. 그런 코드에 물들면 나중에는 스파게티 코드를 만드는 개발자가 되어버린다. 그리고 MFC는 C++ 표준에서 벗어난 MS의 비표준 함수들을 굉장히 많이 사용하기 때문에, 이런 코드가 많아지면 차후 다른 프레임워크나 컴파일러를 사용할 수 있는 여지도 없어진다.

C++ 언어와 윈도우 운영체제(Win32 API)에 대한 이해가 있다면 못 써먹을 정도의 물건은 아니다. MFC는 C++ 라이브러리이며, 윈도우 운영체제를 다루기 위한 것이므로 이 둘에 대한 선행 학습이 이루어져야 한다.

4. MFC 대체 라이브러리

MFC를 대체하는 GUI 프레임워크 및 라이브러리는 GUI 라이브러리 문서 참조.


[1] 비슷한 시기 대체제로는 Object Pascal 언어 기반의 델파이 Visual Basic이 있었다. [2] AFX 팀에서 관리하는 함수가 얼마나 많냐면 윈도우가 한번 업그레이드 되었을 때, MFC는 반년 뒤에 업그레이드가 될 정도라고 하니...