본문 바로가기

프로그래밍/MFC

[MFC] MFC 기초다지기

MFC란?

MFC(Microsoft Foundation Class)는 윈도우 어플리케이션(Window Application)을 생성하기 위해 만들어진 C++ 클래스 라이브러리이다. 따라서 대부분의 클래스들은 C++ 언어를 확장하여 만들어졌으며 이는 개발자로 하여금 GUI기반의 프로그램 제작환경을 만들어 주는 결과를 낳았으며, 때문에 개발 시간을 크게 단축시켜 주었음

MFC는 크게 단일윈도우(SDI)와 다중윈도우(MDI)로 나눌 수 있다.
SDI와 MDI의 차이점
- SDI(Single null Interface), MDI(Multiple null Interface)
  즉 SDI는 하나의 창을 사용하는 것이고, MDI는 여러개의 창을 사용
  때문에 SDI는 익스프플로러나 메모장같은 하나의 창을 사용하는 프로그램을 생각하면 되고, MDI는 엑셀, Visual Basic, Visual C++같은 프로그램을 떠올리면 된다.

MFC의 장점

- 개발시간 단축, 이식성이 강함
- 강력한 인터페이스 지원
- ActiveX, OLE, 인터넷 프로그래밍등의 기술 지원
* OLE(Object Linking and Embedding): 개체 연결 및 삽입
     응용프로그램 간의 데이터를 공유할 수 있도록 해주는 기능이며 윈도우 멀티태스킹 기능을 효과적으로 이용할 수 있음
* ActiveX
      마이크로소프트사가 개발한 재사용 가능한 객체지향적인 소프트웨어 구성요소 개발에 사용되는 기술

* OLE, ActiveX 비교
    OLE2.0이 복잡하고 MFC에서 COM을 거의 지원하지 않는 문제가 생기자 마이크로소프트사는 이들을 더 단순하게 만들기 위한 규격을 세워서 1996년에 ActiveX라는 이름으로 기술을 다시 상품화하였음

다시정리하자면 OLE를 확장한 것이 OCX(OLE Control Extensions), 윈도우95이상에 대한 OCX표준안이 ActiveX가 된다.

* COM(Component Object Model)
  1. 윈도우가 지금까지 사용되기까지는 여러가지 프로그래밍의 개념들의 도입이 이루어졌기 때문이다. 윈도우가 처음 만들어졌을때는 멀티태스킹, 파이프, 소켓, 공유메모리등의 개념을 가지지 못하여 이런 취약점을 해결하기 위하여 마이크로소프트사는 새로운 개념들을 제공하기 시작했으며 이에 멀티태스킹과 프로세스간의 통신을 위해 제안된 것들이 DLL, RPC, DDE와 같은 개념이다.
- DLL(Dynamic Link Library)
  (1) 동적 라이브러리를 이용한 프로세스간의 공유를 구현하는 방법
  (2) UNIX에서 사용하는 공유 라이브러리와 공유 메모리같은 기능을 수행
  (3) 현재의 윈도우를 구성하는 파일들의 상당 부분을 차지하고 있으며 사용자가 직접 제작가능
- RPC(Remote Process Communication)
  (1) 프로세사간의 원격 호출을 구현하는 방법으로 다른 운영체제에서도 사용되고 있음.
  (2) 요즘의 분산환경 기술의 발전과 더불어 개념적인 형상을 이룸
- DDE(Dynamic Data Exchange)
  (1) 프로세스간의 데이터를 동적으로 처리를 구현하는 방법
  (2) 기존의 제작되어있는 프로그램의 프로세스와 새로운 응용프로그램간의 데이터교한에 주로 사용

  2. UNIX에 비해 부족했던 점들을 따라가는 형식이였지만 초창기의 프로그래밍에 활용되었다.

  3. 현재 COM플랫폼은 .NET프레임워크에 많은 지위를 빼앗긴 상태


MFC 용어 및 클래스

- MFC 응용프로그램 마법사는 단순히 코드를 복사하는 것이 아니라 기존에 있는 클래스를 상속받아 새로운 클래스를 생성한다.
- 리소스란 대화상자, 메뉴, 툴바, 아이콘등과 같이 어떤 프로그램을 구현하기 위해 부수적으로 필요한 자원
   (쉽게말해 UI디자인이라고 생각할 수 있다)
- 탬플릿이란 애플리케이션의 여러 자원들과 Main Frame 클래스, View클래스, Document클래스 등을 하나의 묶음으로 가지는 클래스라 할 수 있다.
- SDI란 Main Frame클래스, View클래스, Document클래스가 하나의 템플릿으로 구성되어진 것을 말함.


[MFC 클래스의 계층적 구조형태]