"엠에프씨"의 두 판 사이의 차이
잔글 |
잔글 (→같이 보기) |
||
349번째 줄: | 349번째 줄: | ||
* [[클래스]] | * [[클래스]] | ||
* [[라이브러리]] | * [[라이브러리]] | ||
+ | * [[MFC]] | ||
{{프로그래밍 언어|검토 필요}} | {{프로그래밍 언어|검토 필요}} |
2021년 8월 30일 (월) 23:17 기준 최신판
엠에프씨(MFC)는 Microsoft Foundation Class Library의 약자로서, C++ 프로그래밍 언어에서 사용하는 마이크로소프트 클래스 라이브러리이다. MFC는 1992년에 마이크로소프트에 의해 출시되었고 빠르게 널리 이용되었다. 이후 마이크로소프트가 대체 애플리케이션 프레임워크를 도입했지만 엠에프씨는 여전히 널리 사용되고 있다. 엠에프씨 라이브러리에는 데이터베이스 인터페이스를 개발하기 위한 그래픽 사용자 인터페이스 요소인 윈도우, 프레임 메뉴, 툴바, 상태바 등의 응용 프로그램들로부터 메시지 등과 같은 이벤트 처리, 키보드, 마우스 입력, 그리고 액티브 엑스 컨트롤 개발 등을 위한 라이브러리 클래스들이 있다.
목차
역사[편집]
MFC는 1992년 마이크로소프트의 C/C++7.0 컴퍼일러와 함께 윈도 API용 16bit 버전 C++ 래퍼로 도입되었다. C++ 는 당시 상용 애플리케이션 소프트웨어 개발을 위해C를 막 대체하기 시작했다. MFC 프로그램에서는 직접 Windows API 호출이 거의 필요하지 않다. 대신 프로그램은 Microsoft Foundation Class 클래스에서 객체를 생성하고 이러한 객체에 속하는 Call 멤버 함수를 호출한다. 초기 개발의 MFC는 "Application Framework Extensions"라고 불러져, 약자로는 "AFX"이었다, 하지만 Microsoft Foundation Class(MFC)라는 명칭은 릴리드 사이클 사이에 지나치게 많이 채택되어 명칭이 변경되었다.. MFC 8.0은 Visual Studio 2005년에 함께 출시되었다. 2008년 4년 7일, 마이크로소프트는 Visual Studio 2008 및 MFC의 대역 외 업데이트로 MFC 클래스에 대한 업데이트를 발표하였다. 업데이트는 ribbons 및 관련 UI 위젯, 완전히 사용자 정의가 가능한 툴바, 도킹 창 등, 임의의 측면과 문서 탭에 자유롭게 띄우거나 도킹할 수 있는 새로운 사용자 인터페이스 구조가 특징이다. MFC는 처음에Visual Studio의 상용버전의 특징이었다. 그러나 프리웨어인 Visual C++ Express에는 포함되지 않는다. 2014년에 소개된 Visual Studio의 커뮤니티 버전은 MFC를 포함한다.
특징[편집]
- 객체지향 프로그래밍 : MFC에서 객체지향이란 예를 들면 창, 대화상자, 메시지 박스 등 시각적인 객체를 통한 인터페이스를 구현하고 있는데, 이런 식으로 각각의 객체를 중심으로 하는 프로그래밍을 말한다.
- 이벤트 처리방식의 프로그래밍 : 사용자가 마우스를 클릭하는 것과 같이 컴퓨터를 조작하는 것에 의해 일어나는 이벤트를 말한다. 예를 들어 마우스로 메뉴의 도움말을 눌렀을 때가 이벤트 발생이고, 도움말이 뜨는 것은 이벤트 처리에 해당한다. 이렇게 윈도우의 응용프로그램은 각각의 이벤트를 잡아서 원하는 처리를 하는 방식으로 프로그램을 작성하는 특징이 있다.
- 메시지 처리 방식의 프로그래밍 : 이벤트의 발생을 감지하는 건 윈도우 운영체가 담당한다. ContextlMenu은 윈도우 이벤트가 발생했을 경우 해당 이벤트를 메시지를 통해 알려주고 그 메시지를 받아서 그에 따른 Output을 한다. 이것을 Message Driven Programming라고 한다.[1]
- 사용목적:Microsoft Windows 환경에서 실행되는 GUI(Graphic User Interface) 개발을 위해 사용된다.C언어 API인 Win32 API를 사용할 수 있지만 생산성의 문제로 MFC를 사용하는 경우가 대다수다Win32 API보다는 MFC가 생산성이 좋다는것을 알수있다.
MFC의 계층구조[편집]
MFC는 크게 CObject로 부터 파생괴는 클래스와 CObject로부터 파생되지 않는 클래스가 있다.
CObject로 부터 파생괴는 클래스[편집]
- CObject클래스에서 파생이 되면 CObject클래스에서 제공 하는 서비스를 상속받는다. 이는 런타임 클래스 정보, 직렬화 정보, 동적 생성 지원, 객체 진단 출력이 있다.
- CObject: Application Architecture, Exceptions, File Services, Graphical Drawing, Control Support, Graphical Drawing Objects, Menus, Command Line, ODBC Database Support, DAI Database Suppot, Synchronization, Windows Sockets, Arrays, Lists, Maps, Intrnet Services
- CCmdTarget: Window Support
- CWnd: Frame Windows, Control Bars, Property Sheets, Dialog Boxes, Views, Controls
CObject로부터 파생되지 않는 클래스[편집]
- Internet Server API, Run-Time Object Modle Support, Structures, Simple Value Types, Support Classes, Typed Template Collections, OLE Type Wiappers, OLE Aytomation Types, Synchronization
장점과 단점[편집]
장점[편집]
- 프로그램 개발 시간을 단축시켜준다. 기존의 Win32API를 이용할 때, 개발자가 직접 하던 많은 실행 함수에 대한 번거로움을 개선하였다.
- 객체지향을 이용하여 C++ 프로그래밍을 하면서도 Win 32 SDK 함수를 그대로 사용할 수 있다.
- 안전한 동적 메모리 관리 그리고 할당 영역 검증, 디버깅 등의 기능을 활용하여 버그가 적은 즉 안전한 프로그램을 작성할 수 있다.
- 다른 운영 체제로 이식이 가능하다. MFC로 작성된 프로그램을 매킨토시나 유닉스 버전으로 포스팅 할 수 있다.
- 개발자로 하여금 손쉬운 GUI 기반의 프로그램 제작환경을 만들어 준다
- ActiveX. OLE.ODBC 등의 다양한 인터페이스의 기본 제공으로 프로그래밍을 쉽게 만들어준다.
- Win 32 SDK (API) 에 비하여 유지 보수가 쉽다.
단점[편집]
- Visual C++ 2008년도 Feature Pack에서 추가된 ribbons 인터페이스는 Microdoft Office 와 비교해보면 매우 다른 차이점이 보인다. 이는 해당 클래스들이 MS에서 제작된 것이 아니라 타사(https://www.bcgsoft.com/)에서 제작한 것을 MS사가 구입하여 포함했기 때문이다.
- GUI 디자인 기능이 매우 부족하다. 직접 UI을 그려서 설계할 수 있는 부분은 "윈도 리소스"라는 특별한 형식으로 처리되는 다이얼로그(대화상자)만 가능하고 일반적인 화면은 직접 코드로 구현해야 한다.
- 지난 몇 년 새 MFC에 속한 라이브러리 수가 굉장히 방대해져서 현재는 MS에서 MFC를 유지/개보수하는 AFX 팀에서도 포기했다고 할 정도로 여러 면에서 꼬였다고 한다. MFC프로젝트를 만들 때 작성되는 설정들이 제대로 설정이 되지 않는다던지, 리소스를 수정한 후 코드 창에서 저장을 하면 리소스 헤더 파일의 인코딩이 문제가 되는 등의 오류가 자주 발생한다.[2]
버전[편집]
제품버전 DLL버전 MFC버전 도입년도 Microsoft C/C++ 7.0 X MFC 1.0 1992 Visual C++ 1.0 X MFC 2.0 1993년 8월 Visual C++ 1.5 mfc250.dll MFC 2.5 1993년 12월 Visual C++ 1.51 mfc250.dll MFC 2.51 Visual C++ 1.52c mfc250.dll MFC 2.5 1995년 Visual C++ 2.0 mfc30.dll MFC 3.0 1994년 10월 Visual C++ 2.1 mfc30.dll MFC 3.1 1995년 Visual C++ 2.2 mfc30.dll MFC 3.2 Visual C++ 4.0 mfc40.dll MFC 4.0 1995년 9월 Visual C++ 4.1 mfc40.dll MFC 4.1 1996년 Visual C++ 4.2 mfc42.dll MFC 4.1 1998년 eMbedded Visual C++ 3.0 mfc42.dll MFC 4.2 Visual C++ 5.0 mfc42.dll MFC 4.21, a major upgrade from MFC 4.2. Visual C++ 6.0 mfc42.dll MFC 6.0 1998년 eMbedded Visual C++ 4.0 mfcce400.dll MFC 6.0 Visual C++ .NET 2002 (Visual C++ 7.0) mfc70.dll MFC 7.0 Visual C++ .NET 2003 (Visual C++ 7.1)/Visual C++ .NET 2003 + MS11-025[ mfc71.dll MFC 7.1, MFC 7.10.6119.0 2003년 4월, 2011년4월 Visual C++ 2005 (Visual C++ 8.0) mfc80.dll MFC 8.0.50727.42 2005년 10월 Visual C++ 2005 SP1 mfc80.dll MFC 8.0.50727.762 2007년 6월 Visual C++ 2005 SP1 + MS09-035 mfc80.dll MFC 8.0.50727.4053 2009년 7월 Visual C++ 2005 SP1 + MS11-025 (KB2467175)[ mfc80.dll MFC 8.0.50727.5592 2011년4월 Visual C++ 2005 SP1 + MS11-025 mfc80.dll MFC 8.0.50727.6195 2011월 7월 Visual C++ 2008 (Visual C++ 9.0) mfc90.dll MFC 9.0.21022.8 2007년 11월 Visual C++ 2008 with Feature Pack mfc90.dll MFC 9.0.30411 2008년 4월 Visual C++ 2008 SP1 mfc90.dll MFC 9.0.30729.1 2008년 8월 Visual C++ 2008 SP1 + MS09-03 mfc90.dll MFC 9.0.30729.4148 2009년 7월 Visual C++ 2008 SP1 + MS11-025(KB2467174) mfc90.dll MFC 9.0.30729.5570 2011년 4월 Visual C++ 2008 SP1 + MS11-025(KB2538243) mfc90.dll MFC 9.0.30729.6161 2011년 7월 Visual C++ 2010 (Visual C++ 10.0) mfc100.dll MFC 10.0.30319.1 2010년 4월 Visual C++ 2010 + MS11-025 mfc100.dll MFC 10.0.30319.415 2011년 4월 Visual C++ 2010 SP1 mfc100.dll MFC 10.0.40219.1 2011년 3월 Visual C++ 2010 SP1 + MS11-025 mfc100.dll MFC 10.0.40219.325 2011년 8월 Visual C++ 2012 (Visual C++ 11.0) mfc110.dll MFC 11.0.50727.1 2012년 7월 26일 Visual C++ 2012 Update 1 mfc110.dll MFC 11.0.51106.1 2012년11월5일 Visual C++ 2012 Update 3 mfc110.dll MFC 11.0.60610.1 (also included in redist 11.0.61030) 2013년 7월 26일 Visual C++ 2013 (Visual C++ 12.0) mfc120.dll MFC 12.0.21005.1 2013년 10월 5일 Visual C++ 2013 Update 2 mfc120.dll MFC 12.0.30501.0 2014년 12월 30일 Visual C++ 2013 Update 5 + KB3179560 mfc120.dll MFC 12.0.40660.0 2016년 7월 8일 Visual C++ 2013 Update 5 + KB4032938 mfc120.dll MFC 12.0.40664.0 2017년 7월 18일 Visual C++ 2015 (Visual C++ 14.0 mfc140.dll MFC 14.0.23026.0 2015년 7월 20일 Visual C++ 2015 Update 1 mfc140.dll MFC 14.0.23506.0 2015년 11월 30일 Visual C++ 2015 Update 2 mfc140.dll MFC 14.0.23918.0 2016년 3월 30일 Visual C++ 2015 Update 3 mfc140.dll MFC 14.0.24210.0 2016년 7월 27일 Visual C++ 2015 Update 3 + KB3165756 mfc140.dll MFC 14.0.24215.0 2016년 8월 2일 Visual C++ 2017 (Visual C++ 15.0) mfc140.dll MFC 14.10.25008.0 2017년 3월 7일 Visual C++ 2017 (Visual C++ 15.2) mfc140.dll MFC 14.11.25325.0 2017년 5월 10일 Visual C++ 2017 (Visual C++ 15.4) mfc140.dll MFC 14.12.25810.0 2017년 10월 10일 Visual C++ 2017 (Visual C++ 15.6) mfc140.dll MFC 14.13.26020.0 2018년 3월 6일 Visual C++ 2017 (Visual C++ 15.7) mfc140.dll MFC 14.14.26405.0 2018년 5월 7일 Visual C++ 2017 (Visual C++ 15.7.3) mfc140.dll MFC 14.14.26429.4 2018년 5월 31일 Visual C++ 2017 (Visual C++ 15.8) mfc140.dll MFC 14.15.26706.0 2018년 8월 14일 Visual C++ 2017 (Visual C++ 15.9) mfc140.dll MFC 14.16.27012.6 2019년 11월 13일 Visual C++ 2017 (Visual C++ 15.9.5) mfc140.dll MFC 14.16.27024.1 2019년 6월 10일 Visual C++ 2017 (Visual C++ 15.9.6) mfc140.dll MFC 14.16.27026.1 2019년 6월 24 Visual C++ 2017 (Visual C++ 15.9.9) mfc140.dll MFC 14.16.27027.1 2019년 3월 12일 Visual C++ 2017 (Visual C++ 16.0RC) mfc140.dll MFC 14.20.27404.0 2019년 2월 27일 Visual C++ 2019 (Visual C++ 16.0RC.3) mfc140.dll MFC 14.20.27508.1 2019년 3월 19일 Visual C++ 2019 (Visual C++ 16.1.0) mfc140.dll MFC 14.21.27702.2 2019년 5월 21일
각주[편집]
참고자료[편집]
- RoZium, 〈MFC란〉, 《로지》, 2011-03
- Margaret Rouse, 〈"Microsoft Foundation Class Library (MFC Library)"〉, 《TechTarget》, 2011-03
같이 보기[편집]