Microsoft Foundation Class Library

윈도우 프로그래머의 원수

Microsoft Foundation Class Library는 Windows API를 C++의 클래스 모음으로 묶은 것이다.

특징[편집 | 원본 편집]

원래 윈도우의 API는 다양한 언어에서 포팅하기 쉽게 하려고 C언어의 함수로 구성되어 있다.[1]

하지만 이 API 함수로 코딩을 한다는 것이 쌩 노가다인지라, 네이티브하면서, 좀 더 개발하기 쉽게 하기 위해서는 C++가 딱 제격이고, API의 구조체나 함수를 모아 클래스로 만들어서 라이브러리화한 것이다.

메시지 맵[편집 | 원본 편집]

MFC의 가장 큰 특징이라면 이벤트 처리를 할 때 가상함수를 이용한 멤버함수 재정의가 아닌, 메시지 맵이라는 일종의 매크로를 이용하여 이벤트와, 그 이벤트를 처리할 멤버함수를 연결한다는 점이다.

조금 이상하게 보일지는 모르지만, 수십가지의 이벤트를 가상함수로 만들 경우, 이를 위한 메모리가 소모되는 것을 막기 위해 생겼다.

형식[편집 | 원본 편집]

SDI[편집 | 원본 편집]

Single Document Interface

하나의 Document Template[2]으로 이루어져 한번에 하나의 문서만 사용 가능하다.

대표적인 프로그램으로, 메모장이 있다.

MDI[편집 | 원본 편집]

Multi Document Interface

여러 개의 Document Template으로 이루어져 한번에 여러 개의 문서를 사용 가능하다. 화면 분할이 가능한 편집 툴이 여기에 속한다.

대표적인 프로그램으로, Microsoft Visual Studio가 있다.

Dialog Box[편집 | 원본 편집]

일반적인 버튼 누르고, 스크롤 내리고, 리스트나 콤보박스가 있는 프로그램들이 여기에 속한다. 물론, 위의 두 형식에서도 Dialog Box를 사용할 수 있지만, 프로그래밍시 이 형식을 선택하면 날코딩보다는 컨트롤 UI배치를 쉽게 할 수 있다. 하지만 다른 대체재들이 있기 때문에 Dialog Box는 사실 잘 선호되지 않는다. 그렇지만, 예전에 구현된 여러 기능들을 재사용하기 위해 어쩔 수 없이 쓰게 된다.

공용 컨트롤[편집 | 원본 편집]

버튼, 스태틱 컨트롤, 에디트 박스, 리스트박스, 프로그래스 바 등이 제공된다. 기본으로 제공되는 클래스를 상속해서 추기적인 기능을 구현할 수 있다.

사용자 정의 컨트롤[편집 | 원본 편집]

기존의 컨트롤 클래스를 상속하거나, 새로운 컨트롤 클래스를 제작하며, toolbox에서 사용자 정의 컨트롤을 선택해 UI를 배치하게 된다.

대체재[편집 | 원본 편집]

나온지 오래되었고 C++보다 C#을 밀고 있는 편인 마이크로소프트에 의해 찬밥취급을 받고 있다. 따라서 새로운 프로젝트일 경우 GUI를 구성할 때 다음과 같은 대체재들이 존재한다.

  • 윈도우에서만 동작한다면 C#의 Winform이나 WPF가 있다, Winform은 MFC처럼 Windows API를 래핑한 형태에 더 발전된 구조를 가지고 있고, WPF는 XML를 기반으로 윈도우를 디자인하고 하드웨어 가속을 받는 Direct2D로 컨트롤을 그린다. 덕분에 컨트롤을 꾸밀 수 있는 기능이 강력하다. 혹은 마이크로소프트에서 강력하게 밀고 있는 유니버설 윈도우 앱도 괜찮다. 이건 WPF와 비슷한 구조로 윈도우를 디자인한다.
  • 크로스플랫폼으로 동작하려 한다면, C++에서는 QTwxWidgets[3], C언어에서는 GTK+가 있다.
  • Java의 Swing이나 AWT는...... 잊어버리자......

각주

  1. 좀 쓰인다 하는 언어들은 C언어 함수의 바인딩을 지원한다
  2. Mainframe 클래스, View 클래스, Document 클래스의 묶음. C++의 키워드가 아니다!
  3. 문법이 비슷해 갈아타기 쉽다.