마이크로소프트 파운데이션 클래스 라이브러리

마이크로소프트 파운데이션 클래스 라이브러리(, MFC)는 마이크로소프트에서 만든 윈도우 API를 C++로 둘러 싼 라이브러리이다. 클래스들은 윈도의 공용 컨트롤과 스마트 포인터를 사용하는 창 개체이다.

 역사 

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를 사용하게 되었다.
 컴파일러 버전 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가 있으며, 1990년대 마이크로소프트는 맥 OS용 MFC를 만들기도 했지만, 계속 개발하지 않았다.

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

 같이 보기 
 비주얼 C++

 각주 

 외부 링크 
 MSDN Microsoft Foundation Class Library
 MSDN MFC Reference
 MSDN MFC newsgroup

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