{{위키데이터 속성 추적}}
{{소프트웨어 정보
| name                 = 마이크로소프트 파운데이션 클래스 라이브러리
| logo                   = Microsoft Foundation Class logo.svg
| developer              = [[마이크로소프트]]
| released               = {{시작 날짜와 나이|1992}}
| latest_release_version = 14.22.27821.0
| latest_release_date    = 2019년 7월 24일<ref>{{웹 인용|url=https://docs.microsoft.com/en-us/visualstudio/releases/2019/release-notes |title=Visual Studio 2019 Release Notes |publisher=Msdn.microsoft.com |access-date=2019년 7월 24일}}</ref>
| latest_preview_version =
| latest_preview_date    =
| programming_language   = [[C++]]
| operating_system       = [[마이크로소프트 윈도우]]
| genre                  = [[라이브러리|개발 라이브러리]]
| license                = [[사유 소프트웨어|사유]]
| website                = [http://msdn.microsoft.com/en-us/library/d06h2x6e(v=VS.100).aspx MFC 참조]
}}
'''마이크로소프트 파운데이션 클래스 라이브러리'''({{lang|en|Microsoft Foundation Class Library}}, MFC)는 [[마이크로소프트]]에서 만든 [[윈도우 API]]를 [[C++]]로 둘러 싼 라이브러리이다. 클래스들은 윈도의 공용 컨트롤과 스마트 포인터를 사용하는 창 개체이다.

== 역사 ==
{{출처 필요 문단|날짜=2009-6-20}}
MFC는 1992년 16비트 윈도용 마이크로소프트 C/C++ 7.0 컴파일러에서 처음 도입되었다. 그 당시에는 [[C++]]이 소프트웨어 제품 개발 언어로 활용되기 시작하던 때였다. 마이크로소프트는 개발도구 시장에서 경쟁력을 얻기 위해 C++을 활용하여 MFC를 만들었다. MFC의 구조는 후에 시맨틱사에 매각된 매킨토시의 [[TCL]](Think Class Library)에서 영향을 받았다.

볼랜드의 [[터보 C++]]과 [[터보 파스칼]]에서는 [[OWL]](Object Windows Library)이란 경쟁제품이 있었다. 객체 지향 모델을 더 엄격하게 따르고 있었기 때문에, OWL은 한때 MFC보다 인기 있었다. 하지만 윈도의 새로운 기능에 대한 업데이트가 늦어지게 되면서, 시장 지배력을 잃어버렸다. 그 이후 볼랜드는 OWL의 개발을 중단하고, 이를 대체하는 [[비주얼 컴포넌트 라이브러리|VCL]]을 개발하여 [[델파이]]와 [[C++빌더]]에서 사용하고 있다. C++빌더는 MFC를 라이선스 받아 포함하고 있다.

마이크로소프트에서 MFC가 만들어졌음에도 많은 프로그래머들에게 MFC는 너무 복잡했기 때문에, 마이크로소프트는 상용 소프트웨어 개발에 [[비주얼 베이직]]을 쓰라고 권장하였다. MFC와 비주얼 베이직의 후속작으로 Windows Forms가 출시되었으며 C++ 관리 모드 확장으로 쓸 수 있다. 비주얼 스튜디오 2005 출시와 함께 닷넷 프레임워크의 기능들을 더 쉬운 문법으로 쓸 수 있게 되었다.

비주얼 베이직을 강조하면서도 새 버전의 [[비주얼 스튜디오]]에는 항상 MFC가 공급되었다. 그래서 많은 프로그래머들이 MFC를 사용하게 되었다.
{| class="wikitable" border="1" cellspacing="0" cellpadding="5" align="right"
! 컴파일러 버전
! MFC 버전
|- 
| 마이크로소프트 C/C++ 7.0
| MFC 1.0
|- 
| 비주얼 C++ 1.0
| MFC 2.0
|- 
| 비주얼 C++ 1.5
| MFC 2.5
|- 
| 비주얼 C++ 2.0
| MFC 3.0
|- 
| 비주얼 C++ 2.1
| MFC 3.1
|- 
| 비주얼 C++ 2.2
| MFC 3.2
|- 
| 비주얼 C++ 4.0
| MFC 4.0
|- 
| 비주얼 C++ 4.1
| MFC 4.1
|- 
| 비주얼 C++ 4.2
| MFC 4.2
|- 
| 비주얼 C++ 5.0
| MFC 4.21 (mfc42.dll)
|- 
| 비주얼 C++ 6.0
| MFC 6.0 (mfc42.dll)
|- 
| 비주얼 C++ .NET 2002
| MFC 7.0 (mfc70.dll)
|- 
| 비주얼 C++ .NET 2003
| MFC 7.1 (mfc71.dll)
|- 
| 비주얼 C++ 2005
| MFC 8.0 (mfc80.dll)
|-
| 비주얼 C++ 2008
| MFC 9.0 (mfc90.dll)
|-
| 비주얼 C++ 2010
| MFC 10.0 (mfc100.dll)
|-
|}

== 기능 ==
MFC가 처음 도입되었을 때 마이크로소프트는 기본적인 C++ 문법에 메시지 처리, 예외 처리, 런타임 처리, 동적 클래스 객체 생성을 위한 매크로를 추가해 C++ 언어를 확장하려 했다. 이런 매크로를 활용한 시스템은 컴파일러의 타입 검사를 무시하므로 버그를 가져올 수 있었다. 32비트 버전의 MFC부터 이것이 개선되었다.

MFC의 가장 큰 장점은 윈도 API를 객체지향적으로 프로그래밍할 수 있다는 것이다. 또한 윈도의 자원과 연관된 형들은 그들을 생성한 객체가 죽게 되면 자동으로 [[핸들 (컴퓨팅)|핸들]]을 해제해 준다는 장점도 있다. 게다가 MFC의 문서/뷰 프레임워크는 데이터 모델과 유저 인터페이스, 제어 로직을 분리한다는 MVC 디자인을 자연스럽게 만들어준다.

하지만 MFC는 다중 운영체제를 지원하지 않는다는 약점이 있다. Mainsoft가 만든 유닉스용 MFC가 있으며[https://web.archive.org/web/20061015172009/http://www.mainsoft.com/solutions/vmw5_wp.aspx], 1990년대 마이크로소프트는 맥 OS용 MFC를 만들기도 했지만, 계속 개발하지 않았다.

MFC Feature Pack을 지원하여, 리본 메뉴 등의 UI를 IDE에서 자동으로 작성해준다.

== 같이 보기 ==
* [[비주얼 C++]]

== 각주 ==
<references />

== 외부 링크 ==
* [https://web.archive.org/web/20050807075436/http://msdn.microsoft.com/library/en-us/vcmfc98/html/mfchm.asp MSDN Microsoft Foundation Class Library]
* [https://web.archive.org/web/20060907150737/http://msdn.microsoft.com/library/en-us/vclib/html/_mfc_Class_Library_Reference_Introduction.asp MSDN MFC Reference]
* [https://web.archive.org/web/20070310040706/http://msdn.microsoft.com/newsgroups/default.aspx?dg=microsoft.public.vc.mfc MSDN MFC newsgroup]

{{마이크로소프트 API}}
{{위젯 툴킷}}
{{전거 통제}}

[[분류:MFC]]
[[분류:마이크로소프트 API]]