단순 요약


1. API는 C 프로그래밍에서 사용 된다.

2. MFC는 C++ 프로그래밍에서 사용 된다.

즉,  MFC는 API와 같은 것이나 객체 지향 개념이 도입된 C++에서 API를 기능별로 클래스화 한 형태로 만든 것이다.

 

MFC


Microsoft Foundation Class의 약자로 마이크로소프트에서 만든 클래스이다.

 

C++ 언어를 사용하는 경우 API 함수들이 모두 C 형태로 제공되기 때문에 C++의 특징인 객체지향의 형식에도 맞도록 재구성의 필요성이 증대했다. 이에 Microsoft에서 C++ 개발자를 위해 API 함수와 API 함수가 사용하는 구조체들을 모아서 클래스를 만들어 놓았는데 이 클래스의 집합을 MFC라 한다. 

 

MFC의 시초는 AFX(Application Framework)에서 유래되었다 할 수 있다. AFX는 1990년 마이크로소프트가 윈도우 API 함수를 캡슐화하여 만든 라이브러리이다. AFX는 MFC의 전 단계로, 수정을 거쳐서 지금의 MFC가 완성된 것이다. 1993년 이후부터 MFC 라이브러리는 Visual C++에 포함되어 제공되고 있다.

 

 

MFC의 특징


  • 객체 지향 프로그래밍
    • C++의 모든 문법이나 특성을 그대로 이어 받는다.
    • 윈도우의 Object를 포함하는 시각적 객체를 사용한다.

 

  • 이벤트 처리방식
    • 사용자 또는 시스템이 윈도우에 어떤 동작을 했을 경우 그에 대응하여 움직이는 사건의 중심을 프로그램이라 하며 이것을 Event Driven Programming이라 한다.

 

  • 메세지 처리방식
    • 윈도우 이벤트가 발생했을 경우 해당 이벤트를 메세지를 통해 알려주고 그 메시지를 받아서 그에 따른 Output을 한다. 이를 Message Driven Programming이라 한다.

 

MFC의 장점


  • 프로그램 개발 시간을 크게 단축시킨다. 기존의 Win32 API를 이용할 때, 개발자가 직접하던 많은 실행 함수에 대한 번거로움을 개선한다.
  • 객체지향을 이용하여 C++ 프로그래밍을 하면서도 Win32 API 함수를 그대로 사용할 수 있다.
  • 동적 메모리 할당 영역 검증 및 관리, 디버깅 등의 기능을 활용해 버그가 적은 안전한 프로그램을 작성할 수 있다.
  • 다른 운영체제로 이식성이 좋다. MFC로 작성된 프로그램을 매킨토시나 유닉스 버전으로 포팅할 수 있다.
  • 개발자로 하여금 손쉬운 GUI 기반 프로그램 제작 환경을 만들어 준다.

 

MFC의 계층도


기본적으로 MFC 프로젝트를 생성하면 위와 같은 구조도로 이루어져 있으며, 위와 같은 계층 구조에서 크게 벗어나지 않는 범위 내에서 파생 클래스로 모든 클래스를 상속 받아서 만들어지게 된다.

따라서 A부터 Z까지 모든 것을 프로그래머가 프로그래밍을 하는 것이 아니라, 공통적인 부분은 MFC 클래스에서 제공하는 기능을 그대로 이용하고, 고유한 기능만 프로그래머가 커스터마이징하여 넣어주면 되기에 프로그래머 입장에서 손쉽게 코딩할 수 있다.

 

Reference


[1] https://yyman.tistory.com/490

[2] https://coding-factory.tistory.com/141

'Interest > 기타' 카테고리의 다른 글

[Windows Programming] main, wmain, _tmain  (0) 2020.03.18
[C/C++] 예외 핸들링(Exception Handling)  (0) 2020.03.18
[Windows Programming] API와 SDK  (0) 2020.03.18
[Windows Programming] HWND, HINSTANCE, HDC  (0) 2020.03.18
VI 기능 단축키  (0) 2020.03.18

응용 프로그램과 API


컴퓨터에서 실행되는 모든 프로그램을 운영체제가 제공할 수 없다. 다양한 사용자의 요구를 운영체제가 모두 반영할 수 없기 때문이다. 따라서 운영체제에서 제공하는 프로그램과는 별도로 개발자들이 해당 운영체제에서 동작하는 프로그램을 개발할 수 있는데 이렇게 개발된 프로그램을 응용 프로그램(Application Program)이라 한다.

 

응용 프로그램 개발자들은 일반 사용자와 마찬가지로 운영체제를 통해서 하드웨어를 간접 제어하고 운영체제가 관리하는 정보에 접근할 수 있다. 차이가 있다면 일반 사용자는 운영체제에서 제공하는 프로그램들(제어판, 탐색기 등)을 사용해서 작업을 진행하지만 응용 프로그램 개발자들은 조금 더 효과적인 처리를 위해서 운영체제가 제공하는 함수를 통해서 이런 작업을 한다는 것이다.

 

여기서 응용 프로그램 개발자들이 해당 운영체제에서 동작하는 프로그램을 쉽게 만들 수 있도록 운영체제가 제공하는 함수의 집합체를 API(Application Programming Interface)라고 한다.

 

 

SDK


API를 사용하기 위해서는 프로그래밍 언어와 함께 해당 프로그램 언어를 컴파일 할 수 있는 컴파일러도 제공되어야 한다. 메모장과 같은 편집기에서 작업하면 불편하기 때문에 조금 더 편리한 소스 편집기도 필요하다.

 

이처럼 응용 프로그램을 개발하기 위해 필요한 프로그램 집합체, 즉 개발 환경을 SDK(Software Development Kit, 소프트웨어 개발 키트)라고 한다. 우리가 개발하는 Visual Studio도 개발에 필요한 통합 환경을 제공하기 때문에 SDK라고 할 수 있다. 하지만 개발에 필요한 기능만 가지고 있는 것이 아니라 개발 계획을 세우는 기능도 포함되어 있고 개발 후에 프로그램을 유지보수 하는 개념과 사용자에게 편리하게 배포(설치 파일을 만들고 사용자에게 전달하는 기능 등)하는 기능까지 포함하고 있기 때문에 SDK 보다는 조금 더 넓은 의미의 통합 개발 환경을 제공한다.

 

Reference


[1] https://blog.naver.com/tipsware/220918842965

+ Recent posts