MFC 발견 (1)

Post on 29-Jan-2018

813 views 1 download

Transcript of MFC 발견 (1)

MFC 발견

첫번째 주제

• GUI 프로그래밍과 MFC 소개

• MFC를 통해 우리가 배울 수 있는 거

• 첫번째 예제

↑ 시바견

우리가 그 동안 해왔던 것

누구한테 보여주기도 민망하다…

만들고 싶은 거

도스 창 말고 제대로 된 창을

보여주고 싶다!

꼭 MFC로 해야 하나?

No! MFC말고도 방법은 많다!

그치만 MFC는 비주얼 스튜디오에서

지원하니까 무진장 편하다.

순식간에 창이며 버튼들을

만들 수 있다.

또한, MFC는 아직도 많이 쓴다.

MS에서는 버렸지만..

MFC 말고 어떤 게 있을까?

• Windows API를 이용한다. (강의시간에 말한 SDK!!!)

• 자바 GUI 개발을 한다. (AWT, Swing..)

• Qt나 GTK 등의 라이브러리를 이용한다(이것들은 C/C++, 파이썬, PHP 등등.. 다양한 OS/언어를 지원)

• [닷넷] WinForms나 WPF를 이용한다

교재 34쪽 SDK

교재 35쪽 .NET

MFC 말고 어떤 게 있을까?

• Windows API를 이용한다. (강의시간에 말한 SDK!!!)

• 자바 GUI 개발을 한다. (AWT, Swing..)

• Qt나 GTK 등의 라이브러리를 이용한다

(이것들은 C/C++, 파이썬, PHP 등등.. 다양한 OS/언어를 지원)

• [닷넷] WinForms나 WPF를 이용한다

손이 너무 많이 가고, 생산성이 떨어진다.

MFC 말고 어떤 게 있을까?

• Windows API를 이용한다. (강의시간에 말한 SDK!!!)

• 자바 GUI 개발을 한다. (AWT, Swing..)

• Qt나 GTK 등의 라이브러리를 이용한다

(이것들은 C/C++, 파이썬, PHP 등등.. 다양한 OS/언어를 지원)

• [닷넷] WinForms나 WPF를 이용한다

다양한 OS지원/안드로이드 개발

MFC배우면 조금만 공부하면 OK

MFC 말고 어떤 게 있을까?

• Windows API를 이용한다. (강의시간에 말한 SDK!!!)

• 자바 GUI 개발을 한다. (AWT, Swing..)

• Qt나 GTK 등의 라이브러리를 이용한다

(이것들은 C/C++, 파이썬, PHP 등등.. 다양한 OS/언어를 지원)

• [닷넷] WinForms나 WPF를 이용한다

다양한 OS지원/다양한 언어 지원

MFC배우면 조금만 공부하면 OK

리눅스에서는 많이 쓴다.

MFC 말고 어떤 게 있을까?

• Windows API를 이용한다. (강의시간에 말한 SDK!!!)

• 자바 GUI 개발을 한다. (AWT, Swing..)

• Qt나 GTK 등의 라이브러리를 이용한다

(이것들은 C/C++, 파이썬, PHP 등등.. 다양한 OS/언어를 지원)

• [닷넷] WinForms나 WPF를 이용한다

MS에서 야심차게 준비한 것!

최근엔 리눅스도 지원한다더라

앞으로 알아두면 좋음.

MFC배우다가 가면 신세계!

MFC 말고 어떤 게 있을까?

• 델파이

• 비주얼 베이직

…그냥 넘어가자

교재 34쪽RAD, 클래스 라이브러리

MFC가 왜 나왔나?

vs

HelloSDK.cpp HelloMFC.cpp

교재 35쪽 (여기서 잠깐)

교재 55쪽 (여기서 잠깐)

MFC가 왜 나왔나?

vs

HelloSDK.cpp HelloMFC.cpp

짱 편하다!

교재 35쪽 (여기서 잠깐)

교재 55쪽 (여기서 잠깐)

이것이 어떻게 가능한가?

C++ 시간을 회상하며…

<Class, 객체지향>

상속

추상화

캡슐화

은닉화

다형성

그때는 그저 그냥 외웠던 것들..

이제 써먹는다!

CFrameWnd는 어디에 있고

Create() 는 도대체 뭐 하는 놈이야?

교재 p48-55를 꼭! 읽어보자!

특히 54, 55쪽

atlmfc\src\mfc\wincore.cpp

HelloSDK.cppHelloMFC.cpp

atlmfc\src\mfc\wincore.cpp

HelloSDK.cppHelloMFC.cpp

atlmfc\src\mfc\wincore.cpp

HelloSDK.cppHelloMFC.cpp

atlmfc\src\mfc\wincore.cpp

HelloSDK.cppHelloMFC.cpp

atlmfc\src\mfc\wincore.cpp

HelloSDK.cppHelloMFC.cpp

즉, MFC는 SDK를

쓰기 편하게 만든 것에 불과.

이것들 다 기억하려고 하지 말고,

아하! 이래서 그렇구나! 하고 넘어 갑시다!

자세히 몰라도 되는 내용이지만

“원리와 구조를 알면 MFC 전반적인 이해와 구조 파악에 큰 도움이 된다!”

주의사항!

이것이 어떻게 가능한가?

C++ 시간을 회상하며…

<Class, 객체지향>

상속

추상화

캡슐화

은닉화

다형성

그때는 그저 그냥 외웠던 것들..

이제 써먹는다!

하나의 MFC라는 캡슐

그 캡슐 안에 들어가있는수 많은 SDK 코드들

교재 51쪽 2,3번

(캡슐화 관점에서 본) 객체지향의 prog&cons

• 사용하기 편하다! 코드가 줄어든다.

• 개발자가 알아야 할 내용들이 줄어든다. (부담이 적다)

• 반대로, 한번에 이해하기 어렵다

• 문제가 발생했을 때 멘붕이 온다.

Main 함수는 어디 갔다 버렸어요?

너무 캡슐화를 하다 보니..

Main이 어디로 가버렸어요…

교재 51쪽 3번마지막 줄

Main 함수도 사실 숨겨져 있습니다.(캡슐화)

tchar.h

atlmfc\src\mfc\appmodul.cpp

atlmfc\src\mfc\winmain.cpp

HelloMFC.cpp

1

2

3

MFC의 메인이라고 생각하면 쉽다.

Main 함수도 사실 숨겨져 있습니다.(캡슐화)

tchar.h

atlmfc\src\mfc\appmodul.cpp

atlmfc\src\mfc\winmain.cpp

HelloMFC.cpp

1

2

3

숨겨져 있기에

어렵고 난해했던 것 일뿐!

진입점(Entry Point)에 대해 알아봅시다.

그게 뭔데? 메인 함수!

https://en.wikipedia.org/wiki/Entry_point

컴퓨터 프로그래밍에서,

Entry point는 프로그램으로 들어가는

제어영역이거나,

실행 시작의 코드 부분이다.

이게 메인 함수지 뭐야!

진입점(Entry Point)에 대해 알아봅시다.

• 진입점은 언어와 컴파일러와의 약속이다. (정확히 말하자면 컴파일러가 아니라 Linker다)

• C언어에서는 main 이라고 약속 했을 뿐!

https://msdn.microsoft.com/ko-kr/library/f9t8842e.aspx

진입점(Entry Point)에 대해 알아봅시다.

https://msdn.microsoft.com/ko-kr/library/f9t8842e.aspx

WinMain은 또 뭔가요?

• 윈도우 프로그램을 개발할 때 사용하는 WinMain함수!

• MS에서는 윈도우 프로그램의 진입점 함수를 WinMain이라고 약속했다.

아하! 그래서 HelloSDK.cpp에서 WinMain 함수를 썼구나!

교재 40쪽 2번

WinMain은 또 뭔가요?

• 아하! 그래서 HelloSDK.cpp에서 WinMain 함수를 썼구나!

HelloSDK.cpp

고민해결!

main vs WinMain

• main: 콘솔창의 잔재가 남아있다.

• WinMain: 진정한 윈도우 개발의 시작. 창으로 시작한다.

HelloMain.cpp

진입점(Entry Point)에 대해 더 알아봅시다.

• 사실 진짜 진입점은 Main 함수가 아닙니다.

• Main 보다도 더 먼저 실행되는 녀석이 있습니다. 이 녀석이 바로 진입점입니다.

이 녀석들은 C 런타임(C RunTime) 메인 (CRT main) 이라고 합니다.

진입점(Entry Point)에 대해 알아봅시다.

진입점의 역할• 필요한 것들을 불러오고 전역변수 등과 같이 필수적인 초기화를 한다.

CRT main Main (혹은 WinMain)

main 일 때: 콘솔창

WinMain 일 때: 콘솔창 X

CRT main 이 결정한다!(CRT main에서 콘솔창 생성)

theApp 원리 알아보기

• 실행결과는?

MFC_0.cpp

이제 만들어 봅시다.

MFC_1.cpp

꼭 CWinApp 객체가

하나 만들어져야 한다!

사실 여기까진 몰라도 돼요. But!

이러한 지식들이 쌓이다 보면 분명 도움이 됩니다. 정말 어려운 상황에서 말이죠!

(1) 번은 보통 CRT 라이브러리가 제대로 설치 않았거나 exe가 정상이 아닐 때 나타나는 오류.

(2) 번에서 입력하지도 않은 invoke_main이 갑자기 튀어나온 이유는 바로 오타가 나는 바람에 WinMaim 이라고

입력했기 때문입니다. WinMain보다 먼저 실행되어 초기화 등을 한 다음에 WinMain을 호출 하는 함수가

WinMain을 찾을 수 없기 때문입니다.

오늘 내용 정리

• MFC말고도 많지만, MFC를 가장 많이 쓴다.

• MFC는 SDK보다 코드가 짧다. (생산성 크다)

사실 MFC안에는 엄청난 SDK코드들이 캡슐화 되어있다.

MS 개발자들 고생 좀 했겠어요..

• 윈도우 플밍에서는 WinMain 함수를 쓴다. (진입점)

• MFC에서는 WinMain 조차 감춰져있다! CWinApp 꼭 하나 생성해야한다.

교재 118쪽

MFC 어떻게 공부해야 할까?

• MFC는 프레임워크다. 따라서 정해진 규칙(rule)이 있다.

• 그 규칙을 익히고 ‘재빠르게’ 써먹으면 된다.

• 오늘은 그 규칙을 이해하는 첫 번째 시간이어서 어려웠다ㅠㅠ

• 그걸 이해하지 못하면 왜 main이 없을까라는 고민을 계속 하면서 MFC가 싫어지고..어려워지고..윈플이 싫어지고…그러면 D학점 맞고..

다음 시간에는

• 윈도우 개발 필수지식 (메시지, 이벤트-드리븐)

• MFC 기본 구조 이야기

• 2주차 수업 복습(CString, 자료구조)

• 프로그래밍 세계 이야기 (유니코드, STL…)