SlideShare una empresa de Scribd logo
1 de 39
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쪽
atlmfcsrcmfcwincore.cpp
HelloSDK.cpp
HelloMFC.cpp
atlmfcsrcmfcwincore.cpp
HelloSDK.cpp
HelloMFC.cpp
atlmfcsrcmfcwincore.cpp
HelloSDK.cpp
HelloMFC.cpp
atlmfcsrcmfcwincore.cpp
HelloSDK.cpp
HelloMFC.cpp
atlmfcsrcmfcwincore.cpp
HelloSDK.cpp
HelloMFC.cpp
즉, MFC는 SDK를
쓰기 편하게 만든 것에 불과.
이것들 다 기억하려고 하지 말고,
아하! 이래서 그렇구나! 하고 넘어 갑시다!
자세히 몰라도 되는 내용이지만
“원리와 구조를 알면 MFC 전반적인 이해와 구조 파악에 큰 도움이 된다!”
주의사항!
이것이 어떻게 가능한가?
C++ 시간을 회상하며…
<Class, 객체지향>
상속
추상화
캡슐화
은닉화
다형성
그때는 그저 그냥 외웠던 것들..
이제 써먹는다!
하나의 MFC라는 캡슐
그 캡슐 안에 들어가있는
수 많은 SDK 코드들
교재 51쪽 2,3번
(캡슐화 관점에서 본) 객체지향의 prog&cons
• 사용하기 편하다! 코드가 줄어든다.
• 개발자가 알아야 할 내용들이 줄어든다. (부담이 적다)
• 반대로, 한번에 이해하기 어렵다
• 문제가 발생했을 때 멘붕이 온다.
Main 함수는 어디 갔다 버렸어요?
너무 캡슐화를 하다 보니..
Main이 어디로 가버렸어요…
교재 51쪽 3번
마지막 줄
Main 함수도 사실 숨겨져 있습니다.(캡슐화)
tchar.h
atlmfcsrcmfcappmodul.cpp
atlmfcsrcmfcwinmain.cpp
HelloMFC.cpp
1
2
3
MFC의 메인이라고 생각하면 쉽다.
Main 함수도 사실 숨겨져 있습니다.(캡슐화)
tchar.h
atlmfcsrcmfcappmodul.cpp
atlmfcsrcmfcwinmain.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…)

Más contenido relacionado

La actualidad más candente

대신 귀여운 리눅스를 드리겠습니다
대신 귀여운 리눅스를 드리겠습니다대신 귀여운 리눅스를 드리겠습니다
대신 귀여운 리눅스를 드리겠습니다RangHo Lee
 
[부스트캠프 Tech Talk] 김동현_리팩터링을 통한 내실 다지기
[부스트캠프 Tech Talk] 김동현_리팩터링을 통한 내실 다지기[부스트캠프 Tech Talk] 김동현_리팩터링을 통한 내실 다지기
[부스트캠프 Tech Talk] 김동현_리팩터링을 통한 내실 다지기CONNECT FOUNDATION
 
웹표준과 자동화의 약속된 승리
웹표준과 자동화의 약속된 승리웹표준과 자동화의 약속된 승리
웹표준과 자동화의 약속된 승리Young-Ho Cha
 
[D2 campus]착 하면 척! chak 서비스 개발기
[D2 campus]착 하면 척! chak 서비스 개발기[D2 campus]착 하면 척! chak 서비스 개발기
[D2 campus]착 하면 척! chak 서비스 개발기NAVER D2
 
병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임codenavy
 
[15.09.17] 인터넷과 웹의 역사 그리고 현재의 트렌드
[15.09.17] 인터넷과 웹의 역사 그리고 현재의 트렌드[15.09.17] 인터넷과 웹의 역사 그리고 현재의 트렌드
[15.09.17] 인터넷과 웹의 역사 그리고 현재의 트렌드Sanghun Yun
 
M5 6 1
M5 6 1M5 6 1
M5 6 1nexthw
 
[9xD] 개발자, 스터디로 성장하기
[9xD] 개발자, 스터디로 성장하기[9xD] 개발자, 스터디로 성장하기
[9xD] 개발자, 스터디로 성장하기한재 제
 
C++과 Lua script연동
C++과 Lua script연동C++과 Lua script연동
C++과 Lua script연동선협 이
 
[부스트캠퍼세미나]권혁우_REST는 바이바이_ GraphQL과 함께하는 칼퇴시대
[부스트캠퍼세미나]권혁우_REST는 바이바이_ GraphQL과 함께하는 칼퇴시대[부스트캠퍼세미나]권혁우_REST는 바이바이_ GraphQL과 함께하는 칼퇴시대
[부스트캠퍼세미나]권혁우_REST는 바이바이_ GraphQL과 함께하는 칼퇴시대CONNECT FOUNDATION
 
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기CONNECT FOUNDATION
 
Spring4 + my batis3 + mariadb (maven) 게시판 예제 1
Spring4 + my batis3  + mariadb (maven) 게시판 예제  1Spring4 + my batis3  + mariadb (maven) 게시판 예제  1
Spring4 + my batis3 + mariadb (maven) 게시판 예제 1HeoJJun
 
온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기Seungjae Lee
 
Docker registry swift
Docker registry swiftDocker registry swift
Docker registry swiftJunho Kim
 
Development story
Development storyDevelopment story
Development storyHerren
 
Boss2D 설치과정
Boss2D 설치과정Boss2D 설치과정
Boss2D 설치과정Bonex Gu
 
20 handler and_async_task
20 handler and_async_task20 handler and_async_task
20 handler and_async_task운용 최
 

La actualidad más candente (20)

대신 귀여운 리눅스를 드리겠습니다
대신 귀여운 리눅스를 드리겠습니다대신 귀여운 리눅스를 드리겠습니다
대신 귀여운 리눅스를 드리겠습니다
 
[부스트캠프 Tech Talk] 김동현_리팩터링을 통한 내실 다지기
[부스트캠프 Tech Talk] 김동현_리팩터링을 통한 내실 다지기[부스트캠프 Tech Talk] 김동현_리팩터링을 통한 내실 다지기
[부스트캠프 Tech Talk] 김동현_리팩터링을 통한 내실 다지기
 
웹표준과 자동화의 약속된 승리
웹표준과 자동화의 약속된 승리웹표준과 자동화의 약속된 승리
웹표준과 자동화의 약속된 승리
 
[D2 campus]착 하면 척! chak 서비스 개발기
[D2 campus]착 하면 척! chak 서비스 개발기[D2 campus]착 하면 척! chak 서비스 개발기
[D2 campus]착 하면 척! chak 서비스 개발기
 
TBB 소개
TBB 소개TBB 소개
TBB 소개
 
병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임
 
React principle
React principleReact principle
React principle
 
[15.09.17] 인터넷과 웹의 역사 그리고 현재의 트렌드
[15.09.17] 인터넷과 웹의 역사 그리고 현재의 트렌드[15.09.17] 인터넷과 웹의 역사 그리고 현재의 트렌드
[15.09.17] 인터넷과 웹의 역사 그리고 현재의 트렌드
 
M5 6 1
M5 6 1M5 6 1
M5 6 1
 
[9xD] 개발자, 스터디로 성장하기
[9xD] 개발자, 스터디로 성장하기[9xD] 개발자, 스터디로 성장하기
[9xD] 개발자, 스터디로 성장하기
 
C++과 Lua script연동
C++과 Lua script연동C++과 Lua script연동
C++과 Lua script연동
 
In c
In cIn c
In c
 
[부스트캠퍼세미나]권혁우_REST는 바이바이_ GraphQL과 함께하는 칼퇴시대
[부스트캠퍼세미나]권혁우_REST는 바이바이_ GraphQL과 함께하는 칼퇴시대[부스트캠퍼세미나]권혁우_REST는 바이바이_ GraphQL과 함께하는 칼퇴시대
[부스트캠퍼세미나]권혁우_REST는 바이바이_ GraphQL과 함께하는 칼퇴시대
 
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
 
Spring4 + my batis3 + mariadb (maven) 게시판 예제 1
Spring4 + my batis3  + mariadb (maven) 게시판 예제  1Spring4 + my batis3  + mariadb (maven) 게시판 예제  1
Spring4 + my batis3 + mariadb (maven) 게시판 예제 1
 
온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기
 
Docker registry swift
Docker registry swiftDocker registry swift
Docker registry swift
 
Development story
Development storyDevelopment story
Development story
 
Boss2D 설치과정
Boss2D 설치과정Boss2D 설치과정
Boss2D 설치과정
 
20 handler and_async_task
20 handler and_async_task20 handler and_async_task
20 handler and_async_task
 

Destacado

MFC 개발설정
MFC 개발설정MFC 개발설정
MFC 개발설정종훈 박
 
MFC 핵심개념
MFC 핵심개념MFC 핵심개념
MFC 핵심개념종훈 박
 
MFC 유틸리티 클래스
MFC 유틸리티 클래스MFC 유틸리티 클래스
MFC 유틸리티 클래스종훈 박
 
Researching genre
Researching genreResearching genre
Researching genreelliearm16
 
Baritone TC Techniques 2016
Baritone TC Techniques 2016Baritone TC Techniques 2016
Baritone TC Techniques 2016Randall Bennett
 
Baritone BC Techniques 2016
Baritone BC Techniques 2016Baritone BC Techniques 2016
Baritone BC Techniques 2016Randall Bennett
 
Mellophone Techniques 2016
Mellophone Techniques 2016Mellophone Techniques 2016
Mellophone Techniques 2016Randall Bennett
 
Phase 1 Documentation (Added System Req)
Phase 1 Documentation (Added System Req)Phase 1 Documentation (Added System Req)
Phase 1 Documentation (Added System Req)Reinier Eiman
 
Font Research/Planning
Font Research/PlanningFont Research/Planning
Font Research/Planningelliearm16
 
mfc introducere
mfc introduceremfc introducere
mfc introduceremcroitor
 
테스트 코드 삽질기 + 리팩토링
테스트 코드 삽질기 + 리팩토링테스트 코드 삽질기 + 리팩토링
테스트 코드 삽질기 + 리팩토링종훈 박
 
스마트폰 혁명(김태우)
스마트폰 혁명(김태우)스마트폰 혁명(김태우)
스마트폰 혁명(김태우)gilforum
 
[C++adv] STL 사용법과 주의 사항
[C++adv] STL 사용법과 주의 사항[C++adv] STL 사용법과 주의 사항
[C++adv] STL 사용법과 주의 사항MinGeun Park
 
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문종훈 박
 

Destacado (20)

MFC 개발설정
MFC 개발설정MFC 개발설정
MFC 개발설정
 
MFC 핵심개념
MFC 핵심개념MFC 핵심개념
MFC 핵심개념
 
MFC 유틸리티 클래스
MFC 유틸리티 클래스MFC 유틸리티 클래스
MFC 유틸리티 클래스
 
2 Professional MFC
2 Professional MFC2 Professional MFC
2 Professional MFC
 
Researching genre
Researching genreResearching genre
Researching genre
 
Baritone TC Techniques 2016
Baritone TC Techniques 2016Baritone TC Techniques 2016
Baritone TC Techniques 2016
 
Baritone BC Techniques 2016
Baritone BC Techniques 2016Baritone BC Techniques 2016
Baritone BC Techniques 2016
 
Mise en scene
Mise en sceneMise en scene
Mise en scene
 
Mellophone Techniques 2016
Mellophone Techniques 2016Mellophone Techniques 2016
Mellophone Techniques 2016
 
Updated Victor C V 1
Updated Victor C V 1Updated Victor C V 1
Updated Victor C V 1
 
Phase 1 Documentation (Added System Req)
Phase 1 Documentation (Added System Req)Phase 1 Documentation (Added System Req)
Phase 1 Documentation (Added System Req)
 
Font Research/Planning
Font Research/PlanningFont Research/Planning
Font Research/Planning
 
Presentation 2
Presentation 2Presentation 2
Presentation 2
 
Tuba Techniques 2016
Tuba Techniques 2016Tuba Techniques 2016
Tuba Techniques 2016
 
Shani waninger
Shani waningerShani waninger
Shani waninger
 
mfc introducere
mfc introduceremfc introducere
mfc introducere
 
테스트 코드 삽질기 + 리팩토링
테스트 코드 삽질기 + 리팩토링테스트 코드 삽질기 + 리팩토링
테스트 코드 삽질기 + 리팩토링
 
스마트폰 혁명(김태우)
스마트폰 혁명(김태우)스마트폰 혁명(김태우)
스마트폰 혁명(김태우)
 
[C++adv] STL 사용법과 주의 사항
[C++adv] STL 사용법과 주의 사항[C++adv] STL 사용법과 주의 사항
[C++adv] STL 사용법과 주의 사항
 
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
 

Similar a MFC 발견 (1)

C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)Dong Chan Shin
 
01 윈도우프로그램 들어가기
01 윈도우프로그램 들어가기01 윈도우프로그램 들어가기
01 윈도우프로그램 들어가기jaypi Ko
 
Pycon Korea 2018 - 비개발자에게 파이썬 가르치기
Pycon Korea 2018 - 비개발자에게 파이썬 가르치기Pycon Korea 2018 - 비개발자에게 파이썬 가르치기
Pycon Korea 2018 - 비개발자에게 파이썬 가르치기SeokhwanMoon
 
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍NDOORS
 
Django Girls 12월 Meetup 발표 자료
Django Girls 12월 Meetup 발표 자료Django Girls 12월 Meetup 발표 자료
Django Girls 12월 Meetup 발표 자료seungdols
 
LinqPad for DevOps
LinqPad for DevOpsLinqPad for DevOps
LinqPad for DevOps성수 이
 
131 deview 2013 yobi-채수원
131 deview 2013 yobi-채수원131 deview 2013 yobi-채수원
131 deview 2013 yobi-채수원NAVER D2
 
NDC17. "솔리테어: 덱다웃" 유니티 모바일 테스팅 기법들
NDC17. "솔리테어: 덱다웃" 유니티 모바일 테스팅 기법들NDC17. "솔리테어: 덱다웃" 유니티 모바일 테스팅 기법들
NDC17. "솔리테어: 덱다웃" 유니티 모바일 테스팅 기법들대원 김
 
게임프로그래머에게 배우는 C#1권(버전1)
게임프로그래머에게 배우는 C#1권(버전1)게임프로그래머에게 배우는 C#1권(버전1)
게임프로그래머에게 배우는 C#1권(버전1)Kiyoung Moon
 
요람(CreateProcess)에서 무덤(ResumeThread)까지
요람(CreateProcess)에서 무덤(ResumeThread)까지요람(CreateProcess)에서 무덤(ResumeThread)까지
요람(CreateProcess)에서 무덤(ResumeThread)까지Hyoje Jo
 
Github? linux? 이건 뭐지?
Github? linux? 이건 뭐지?Github? linux? 이건 뭐지?
Github? linux? 이건 뭐지?Suho Lee
 
SiegeMode! C++ Advanced Project Ver
SiegeMode! C++ Advanced Project VerSiegeMode! C++ Advanced Project Ver
SiegeMode! C++ Advanced Project VerSeokmin No
 
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~YEONG-CHEON YOU
 
[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)
[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)
[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)Sang Don Kim
 
소프트웨어 교육 이야기
소프트웨어 교육 이야기소프트웨어 교육 이야기
소프트웨어 교육 이야기Jaehwi Alice Kim
 
아이폰에 포팅해보기
아이폰에 포팅해보기아이폰에 포팅해보기
아이폰에 포팅해보기changehee lee
 
레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화Jaehoon Choi
 
소스리딩워크샵 - NHN NEXT
소스리딩워크샵 - NHN NEXT소스리딩워크샵 - NHN NEXT
소스리딩워크샵 - NHN NEXTMinsuk Lee
 
MFC 프로젝트 시작하기
MFC 프로젝트 시작하기MFC 프로젝트 시작하기
MFC 프로젝트 시작하기jaypi Ko
 

Similar a MFC 발견 (1) (20)

C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
 
01 윈도우프로그램 들어가기
01 윈도우프로그램 들어가기01 윈도우프로그램 들어가기
01 윈도우프로그램 들어가기
 
Vim 강의
Vim 강의Vim 강의
Vim 강의
 
Pycon Korea 2018 - 비개발자에게 파이썬 가르치기
Pycon Korea 2018 - 비개발자에게 파이썬 가르치기Pycon Korea 2018 - 비개발자에게 파이썬 가르치기
Pycon Korea 2018 - 비개발자에게 파이썬 가르치기
 
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
 
Django Girls 12월 Meetup 발표 자료
Django Girls 12월 Meetup 발표 자료Django Girls 12월 Meetup 발표 자료
Django Girls 12월 Meetup 발표 자료
 
LinqPad for DevOps
LinqPad for DevOpsLinqPad for DevOps
LinqPad for DevOps
 
131 deview 2013 yobi-채수원
131 deview 2013 yobi-채수원131 deview 2013 yobi-채수원
131 deview 2013 yobi-채수원
 
NDC17. "솔리테어: 덱다웃" 유니티 모바일 테스팅 기법들
NDC17. "솔리테어: 덱다웃" 유니티 모바일 테스팅 기법들NDC17. "솔리테어: 덱다웃" 유니티 모바일 테스팅 기법들
NDC17. "솔리테어: 덱다웃" 유니티 모바일 테스팅 기법들
 
게임프로그래머에게 배우는 C#1권(버전1)
게임프로그래머에게 배우는 C#1권(버전1)게임프로그래머에게 배우는 C#1권(버전1)
게임프로그래머에게 배우는 C#1권(버전1)
 
요람(CreateProcess)에서 무덤(ResumeThread)까지
요람(CreateProcess)에서 무덤(ResumeThread)까지요람(CreateProcess)에서 무덤(ResumeThread)까지
요람(CreateProcess)에서 무덤(ResumeThread)까지
 
Github? linux? 이건 뭐지?
Github? linux? 이건 뭐지?Github? linux? 이건 뭐지?
Github? linux? 이건 뭐지?
 
SiegeMode! C++ Advanced Project Ver
SiegeMode! C++ Advanced Project VerSiegeMode! C++ Advanced Project Ver
SiegeMode! C++ Advanced Project Ver
 
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~
 
[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)
[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)
[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)
 
소프트웨어 교육 이야기
소프트웨어 교육 이야기소프트웨어 교육 이야기
소프트웨어 교육 이야기
 
아이폰에 포팅해보기
아이폰에 포팅해보기아이폰에 포팅해보기
아이폰에 포팅해보기
 
레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화
 
소스리딩워크샵 - NHN NEXT
소스리딩워크샵 - NHN NEXT소스리딩워크샵 - NHN NEXT
소스리딩워크샵 - NHN NEXT
 
MFC 프로젝트 시작하기
MFC 프로젝트 시작하기MFC 프로젝트 시작하기
MFC 프로젝트 시작하기
 

MFC 발견 (1)

  • 1. MFC 발견 첫번째 주제 • GUI 프로그래밍과 MFC 소개 • MFC를 통해 우리가 배울 수 있는 거 • 첫번째 예제 ↑ 시바견
  • 2. 우리가 그 동안 해왔던 것 누구한테 보여주기도 민망하다…
  • 3. 만들고 싶은 거 도스 창 말고 제대로 된 창을 보여주고 싶다!
  • 4. 꼭 MFC로 해야 하나? No! MFC말고도 방법은 많다! 그치만 MFC는 비주얼 스튜디오에서 지원하니까 무진장 편하다. 순식간에 창이며 버튼들을 만들 수 있다. 또한, MFC는 아직도 많이 쓴다. MS에서는 버렸지만..
  • 5. MFC 말고 어떤 게 있을까? • Windows API를 이용한다. (강의시간에 말한 SDK!!!) • 자바 GUI 개발을 한다. (AWT, Swing..) • Qt나 GTK 등의 라이브러리를 이용한다 (이것들은 C/C++, 파이썬, PHP 등등.. 다양한 OS/언어를 지원) • [닷넷] WinForms나 WPF를 이용한다 교재 34쪽 SDK 교재 35쪽 .NET
  • 6. MFC 말고 어떤 게 있을까? • Windows API를 이용한다. (강의시간에 말한 SDK!!!) • 자바 GUI 개발을 한다. (AWT, Swing..) • Qt나 GTK 등의 라이브러리를 이용한다 (이것들은 C/C++, 파이썬, PHP 등등.. 다양한 OS/언어를 지원) • [닷넷] WinForms나 WPF를 이용한다 손이 너무 많이 가고, 생산성이 떨어진다.
  • 7. MFC 말고 어떤 게 있을까? • Windows API를 이용한다. (강의시간에 말한 SDK!!!) • 자바 GUI 개발을 한다. (AWT, Swing..) • Qt나 GTK 등의 라이브러리를 이용한다 (이것들은 C/C++, 파이썬, PHP 등등.. 다양한 OS/언어를 지원) • [닷넷] WinForms나 WPF를 이용한다 다양한 OS지원/안드로이드 개발 MFC배우면 조금만 공부하면 OK
  • 8. MFC 말고 어떤 게 있을까? • Windows API를 이용한다. (강의시간에 말한 SDK!!!) • 자바 GUI 개발을 한다. (AWT, Swing..) • Qt나 GTK 등의 라이브러리를 이용한다 (이것들은 C/C++, 파이썬, PHP 등등.. 다양한 OS/언어를 지원) • [닷넷] WinForms나 WPF를 이용한다 다양한 OS지원/다양한 언어 지원 MFC배우면 조금만 공부하면 OK 리눅스에서는 많이 쓴다.
  • 9. MFC 말고 어떤 게 있을까? • Windows API를 이용한다. (강의시간에 말한 SDK!!!) • 자바 GUI 개발을 한다. (AWT, Swing..) • Qt나 GTK 등의 라이브러리를 이용한다 (이것들은 C/C++, 파이썬, PHP 등등.. 다양한 OS/언어를 지원) • [닷넷] WinForms나 WPF를 이용한다 MS에서 야심차게 준비한 것! 최근엔 리눅스도 지원한다더라 앞으로 알아두면 좋음. MFC배우다가 가면 신세계!
  • 10. MFC 말고 어떤 게 있을까? • 델파이 • 비주얼 베이직 …그냥 넘어가자 교재 34쪽 RAD, 클래스 라이브러리
  • 11. MFC가 왜 나왔나? vs HelloSDK.cpp HelloMFC.cpp 교재 35쪽 (여기서 잠깐) 교재 55쪽 (여기서 잠깐)
  • 12. MFC가 왜 나왔나? vs HelloSDK.cpp HelloMFC.cpp 짱 편하다! 교재 35쪽 (여기서 잠깐) 교재 55쪽 (여기서 잠깐)
  • 13. 이것이 어떻게 가능한가? C++ 시간을 회상하며… <Class, 객체지향> 상속 추상화 캡슐화 은닉화 다형성 그때는 그저 그냥 외웠던 것들.. 이제 써먹는다! CFrameWnd는 어디에 있고 Create() 는 도대체 뭐 하는 놈이야?
  • 14. 교재 p48-55를 꼭! 읽어보자! 특히 54, 55쪽
  • 20. 이것들 다 기억하려고 하지 말고, 아하! 이래서 그렇구나! 하고 넘어 갑시다! 자세히 몰라도 되는 내용이지만 “원리와 구조를 알면 MFC 전반적인 이해와 구조 파악에 큰 도움이 된다!” 주의사항!
  • 21. 이것이 어떻게 가능한가? C++ 시간을 회상하며… <Class, 객체지향> 상속 추상화 캡슐화 은닉화 다형성 그때는 그저 그냥 외웠던 것들.. 이제 써먹는다! 하나의 MFC라는 캡슐 그 캡슐 안에 들어가있는 수 많은 SDK 코드들 교재 51쪽 2,3번
  • 22. (캡슐화 관점에서 본) 객체지향의 prog&cons • 사용하기 편하다! 코드가 줄어든다. • 개발자가 알아야 할 내용들이 줄어든다. (부담이 적다) • 반대로, 한번에 이해하기 어렵다 • 문제가 발생했을 때 멘붕이 온다.
  • 23. Main 함수는 어디 갔다 버렸어요? 너무 캡슐화를 하다 보니.. Main이 어디로 가버렸어요… 교재 51쪽 3번 마지막 줄
  • 24. Main 함수도 사실 숨겨져 있습니다.(캡슐화) tchar.h atlmfcsrcmfcappmodul.cpp atlmfcsrcmfcwinmain.cpp HelloMFC.cpp 1 2 3 MFC의 메인이라고 생각하면 쉽다.
  • 25. Main 함수도 사실 숨겨져 있습니다.(캡슐화) tchar.h atlmfcsrcmfcappmodul.cpp atlmfcsrcmfcwinmain.cpp HelloMFC.cpp 1 2 3 숨겨져 있기에 어렵고 난해했던 것 일뿐!
  • 26. 진입점(Entry Point)에 대해 알아봅시다. 그게 뭔데? 메인 함수! https://en.wikipedia.org/wiki/Entry_point 컴퓨터 프로그래밍에서, Entry point는 프로그램으로 들어가는 제어영역이거나, 실행 시작의 코드 부분이다. 이게 메인 함수지 뭐야!
  • 27. 진입점(Entry Point)에 대해 알아봅시다. • 진입점은 언어와 컴파일러와의 약속이다. (정확히 말하자면 컴파일러가 아니라 Linker다) • C언어에서는 main 이라고 약속 했을 뿐! https://msdn.microsoft.com/ko-kr/library/f9t8842e.aspx
  • 28. 진입점(Entry Point)에 대해 알아봅시다. https://msdn.microsoft.com/ko-kr/library/f9t8842e.aspx
  • 29. WinMain은 또 뭔가요? • 윈도우 프로그램을 개발할 때 사용하는 WinMain함수! • MS에서는 윈도우 프로그램의 진입점 함수를 WinMain이라고 약속했다. 아하! 그래서 HelloSDK.cpp에서 WinMain 함수를 썼구나! 교재 40쪽 2번
  • 30. WinMain은 또 뭔가요? • 아하! 그래서 HelloSDK.cpp에서 WinMain 함수를 썼구나! HelloSDK.cpp 고민해결!
  • 31. main vs WinMain • main: 콘솔창의 잔재가 남아있다. • WinMain: 진정한 윈도우 개발의 시작. 창으로 시작한다. HelloMain.cpp
  • 32. 진입점(Entry Point)에 대해 더 알아봅시다. • 사실 진짜 진입점은 Main 함수가 아닙니다. • Main 보다도 더 먼저 실행되는 녀석이 있습니다. 이 녀석이 바로 진입점입니다. 이 녀석들은 C 런타임(C RunTime) 메인 (CRT main) 이라고 합니다.
  • 33. 진입점(Entry Point)에 대해 알아봅시다. 진입점의 역할 • 필요한 것들을 불러오고 전역변수 등과 같이 필수적인 초기화를 한다. CRT main Main (혹은 WinMain) main 일 때: 콘솔창 WinMain 일 때: 콘솔창 X CRT main 이 결정한다! (CRT main에서 콘솔창 생성)
  • 34. theApp 원리 알아보기 • 실행결과는? MFC_0.cpp
  • 35. 이제 만들어 봅시다. MFC_1.cpp 꼭 CWinApp 객체가 하나 만들어져야 한다!
  • 36. 사실 여기까진 몰라도 돼요. But! 이러한 지식들이 쌓이다 보면 분명 도움이 됩니다. 정말 어려운 상황에서 말이죠! (1) 번은 보통 CRT 라이브러리가 제대로 설치 않았거나 exe가 정상이 아닐 때 나타나는 오류. (2) 번에서 입력하지도 않은 invoke_main이 갑자기 튀어나온 이유는 바로 오타가 나는 바람에 WinMaim 이라고 입력했기 때문입니다. WinMain보다 먼저 실행되어 초기화 등을 한 다음에 WinMain을 호출 하는 함수가 WinMain을 찾을 수 없기 때문입니다.
  • 37. 오늘 내용 정리 • MFC말고도 많지만, MFC를 가장 많이 쓴다. • MFC는 SDK보다 코드가 짧다. (생산성 크다) 사실 MFC안에는 엄청난 SDK코드들이 캡슐화 되어있다. MS 개발자들 고생 좀 했겠어요.. • 윈도우 플밍에서는 WinMain 함수를 쓴다. (진입점) • MFC에서는 WinMain 조차 감춰져있다! CWinApp 꼭 하나 생성해야한다. 교재 118쪽
  • 38. MFC 어떻게 공부해야 할까? • MFC는 프레임워크다. 따라서 정해진 규칙(rule)이 있다. • 그 규칙을 익히고 ‘재빠르게’ 써먹으면 된다. • 오늘은 그 규칙을 이해하는 첫 번째 시간이어서 어려웠다ㅠㅠ • 그걸 이해하지 못하면 왜 main이 없을까라는 고민을 계속 하면서 MFC가 싫어지고..어려워지고.. 윈플이 싫어지고…그러면 D학점 맞고..
  • 39. 다음 시간에는 • 윈도우 개발 필수지식 (메시지, 이벤트-드리븐) • MFC 기본 구조 이야기 • 2주차 수업 복습(CString, 자료구조) • 프로그래밍 세계 이야기 (유니코드, STL…)