Blog | Tag | Local | Guest | Login | Write |  RSS
MFC에 해당되는 글 1건
2008.10.16 :: Orientation - MFC 5
Orientation - MFC

안녕하세요.

18-1 기 박상용입니다.

 MFC...
다들 많이 아시죠깊이도 아실테고블로깅 할 필요가 없.......다고 생각했지만그래도 다들 많이 하시고 깊이 아시니 그만큼 이야기 할 주제도 많다고 생각이 들었습니다(절대 할 줄 아는게 이거 뿐이라서가 아니라고 굳이 이야.....)


몇 주를 블로깅 할 지는 모르겠지만, 크게 두가지 주제로 블로깅을 할까 합니다.


- MFC 의 구조 및 관련 기술(ATL/RTTI, MFC 9.0)

- 그리고... MFC 에 관한 잡담들(장단점 및 삽질 일기)



그럼 이제 MFC 와 관련된 잡담으로 첫 블로깅을 시작해 볼까 합니다.



"왜 아직도 MFC 인가?"

 사람들마다 입맛은 저마다 다른 것 같습니다. 뭐 먹는 것 뿐만 아니라 좋아하는 여배우, 여가수 라던가 좋아하는 색깔, 야구팀, 버스의 자리 등등 말이죠. 개발이라는 것을 할 때 쓰는 도구들도 각각 선호하는 쪽으로 많은 관심 밑 편(?)을 드는 것은 당연하다고 생각합니다. 자신이 선호하는 야구팀을 응원하듯 말이죠. 아직은 공부하는 학생이고 어디 회사에서 꼭 이것을 사용해서 이것을 개발 하라는 명령이 없으니 이러한 선호도는 개개인적으로 더더욱 커지는 것 같습니다(당연히 혼자 생각입니다).

 MFC... 이제는 사양될만도 한 구 시대적 유물이 아니냐하는 생각부터 들게 하는 주제가 아니냐고 반기를 들수도 있겠습니다. 더욱, 새로운 것들이 쑴풍쑴풍 나오고 있는 요즘 시대에, 새로운 것을 쓰지않으면 난 뒤쳐진다라는 일종의 무언의 강박관념 때문에 나온지 10년이 넘어 가는 MFC 는 '낡은 기술' 이라는 눈도장이 찍히기 마련이죠.

 그럼에도 불구 하고 왜 아직도 많은 개발회사에서는 Visual C++ 6.0 을 사용하고, 그런 가운데서도 MFC 일까요? 무조건 어렵고 코드의 양이 많은 것을 쓰면 프로그래밍 내공이 늘어 나는것도 아니고, 삽질 삽질을 거듭 할 수 없은 MFC 로 아직도 많은 이들이 좋은? 어플리케이션을 만들기 위해 날밤을 새어 삽질을 하고 있습니다(조금은 객관적인 생각입니다).

 모든 것에는 이유가 있는 법! 크앙! 그럼 MFC 가 Window Programming 을 하기 좋은점 혹은 당위성?에 대해서 몇가지 이야기 해보겠습니다.

1. 노력하는 객체지향

 장점을 찾자! 생각을 하고 시작은 했지만 딱히 생각이 나질 않네요. 그래서 만물박사 "뇌입원" 에게 물어 봤더니 다음 네가지를 이야기 했습니다.

- 효율성 
- 안정성
- 재사용성
- 유지보수성
- 이식성

 어느 학원의 교재로 쓰일 법한 내용의 장점을 살펴 보니, 객체 지향의 장점과 유사한게 몇가지 있습니다. 그럼 과연 MFC 는 객체지향적 일까요?

 그럼 MFC 는 근본적으로 무엇일까요? 그저 대표 이니셜만 때어서 보면 Microsoft Foundation Classes 라고 하는 라이브러리라고 하네요(http://en.wikipedia.org/wiki/Microsoft_Foundation_Class_Library). 또한 MS 홈페이지에서는 MFC 의 Concept 을 다음과 같이 이야기 하네요(http://msdn.microsoft.com/ko-kr/library/583ya1kc(VS.80).aspx).

 The Microsoft Foundation Class Library is an application framework for programming in Microsoft Windows. Written in C++, MFC provides much of the code necessary for managing windows, menus, and dialog boxes; performing basic input/output; storing collections of data objects; and so on. 

 하나의 언어나 Tool 이 아닌 Application Framework 라고 합니다. 그리고 또한 많은 코드들을 제공하는 "니네 마음데로 가져다 써라, 여기는 공짜? 부페다." 라고 하는거 같습니다. 단순히 UI 를 편하게 뽑아 내기 위해서(솔직히 편하지는 않지만요), 그저 내 코드를 재미없는(?) 커맨드 창 보다는 윈도우 창에 표현하기 위해서 MFC 가 존재 하는 것은 아닙니다. 그야 말로 윈도우 프로그래밍에 유용한 클래스 들의 집합체 일 뿐이죠. 
 또한 주목해 볼만한 문장은 Written In C++ 이라는 부분이네요. C++ 쓰여졌다는 군요 MFC 는... 
그리고 위 섹션 다음에서는 다음과 같이 말하고 있습니다.

Given the nature of C++ class programming, it is easy to extend or override the basic functionality that the MFC framework supplies.

 C++ 클래스 프로그래밍이라는, OOP 스타일의 프로그래밍을 하고 있다고 직접 명시 하고 있습니다.(http://en.wikipedia.org/wiki/Class-based_programming)
 하지만, MFC는 위의 말데로 완전 C++ 문법으로 Class Base 의 구조로 되어 있는거 같지는 않습니다. 이유는 MFC 대부분이 Win32API 를 Wrapping 한 Class 형식으로 이루어져 있다는 것 입니다.

Greate 한 프로그램 예제

절대 귀찮아서 이런 프로그래ㅁㅁ니ㅏ러뭉ㄹ몰
아무튼 위와 같은 다얄로그를 띄우는 프로그램이 있다고 칩시다. 호출 스택을 살펴 보면 다음과 같습니다.




AfxWinMain 이라는 함수가 보입니다. Afx 를 제외하고는 눈에 익숙한 API 함수임을 알 수 있습니다.
API 에서도 하나의 기본적인 창을 띄우기 위해서는 WinMain 을 사용하고 첫 인자로 현재 Instance 핸들을 받으며 시작한다는 것은 다들 아실 겁니다. (http://msdn.microsoft.com/en-us/library/ms633559(VS.85).aspx)
 그렇다면, Win32API 는 무엇으로 이루어 져있나요? extern "C" 에서 알 수 있듯이 API 함수들은 C 로 구성되어져 있습니다. 따라서 MFC 는 Windows API 함수들을 Wrapping 하되, 좀더(완벽히가 아님)OOP 적인 방법으로 구성 되어졌다고 볼 수 있습니다.

블로깅이 늦어 버렸네요 ;;;
내용을 재미 있게 이어 나갈라니 정말 제가 모르는 부분 투성이라 이게 맞는지 아닌지 검증하고 찾아 보는 시간이 더 걸리는거 같습니다 -_-;; 죄송합니다 (__) 
꼭 주중에 나머지 부분을 완성하고, 요기 내용도 수정해서 마저 올리겠습니다 -_-;
지혜야 벌금 가져가 ;;