MFC 공부를 시작하려는 분들께, C++ WinAPI 기초

MFC 공부를 시작하려는 분들께, C++ WinAPI 기초


들어가기에 앞서, 우리나라는 C++에 대한 오해가 조금 있다는 생각이 듭니다. 물론 시간이 지나면 나아질 문제겠지만요. 우리나라 사람들(개발자 포함)은 C++ 이라고 하면 뭐든 MFC를 떠올립니다. 굳이 MFC를 모르더라도 C++ 이야기를 하면 일단 MFC 많이 생각하죠.



mfc 프로그래머 C++ apiVisual C++ MFC 프로그래밍, 비주얼스튜디오 문제



여기서 문제가 발생합니다.


C++ 공부하겠다는 분들이 MFC 책을 펼쳐요. 왜죠? 대체 무슨 이유로?


요즘 UI가 들어가는 프로그램 MFC로 만드나요? 안 만들어요. 프로그래머들이 MFC를 안 써요.


UI가 필요하면 엔진만 C++로 구성하고 껍데기는 C#으로 만드는 게 추세입니다. C++은 퍼포먼스가 좋으니까요. 만약 이기종 호환이 필요하다면 Qt도 많이 쓰죠. 거기에 파이썬까지 더하면 MFC는 낄 자리가 없습니다. 공식적으로 1999년에 MFC는 마이크로소프트가 지원을 끊었어요.

근데 요즘에 C++ 공부하겠다고 MFC 책을 펼치는 분들은 실수하는 겁니다. 차라리 순수 C++ 다루는 책을 보세요. C++ 프로그래머들 MFC 책 안 봐요. MFC 공부하겠다고 윈도우 부터 시작해 스레드에 도구 상자 펼쳐서 하나하나 코딩하는 거 ... 잘못된 공부 방법입니다. 


C++은 객체지향 프로그래밍 언어이므로 객체지향을 먼저 공부해야 합니다. MFC는 라이브러리 모음으로 MS에서 정한 틀 안에서 코딩해야 합니다.


다이얼로그 초기화, 버튼 이벤트, 윈도우 메시지 등 예전에는 이해하고 잘 써먹으면 똑똑하다는 소리 듣지만, 요즘엔 거기까지 신경 쓸 필요가 없어요. 이런 이야기 하면 겉만 알고 원리는 모른다며 반박할지도 모르겠습니다. 하지만, 원리를 이해하는 것과 원리를 응용하는 건 다른 문제입니다.



MFC 공부 C++ 차이Visual C++ MFC 프로그래밍, 비주얼스튜디오 문제



더군다나 회사에선 이윤 창출을 해야 합니다. 언어가 발전하고 툴이 발전하며 개발자가 신경 쓰지 않아도 되는 부분이 생깁니다. 반대로 언어와 툴이 발전하면서 개발자가 새롭게 신경 쓸 부분이 추가됩니다. 일장일단이죠. 프로그래머가 배워야 할 부분이 시대별로 다르다는 겁니다.


  • 그렇다면, 옛날에 신경 쓸 부분을 공부할 것인가?
  • 요즘 추가된 신경 쓸 부분을 공부할 것인가?
  • 고민되나요?


mfc api c++ 공부 스터디Visual C++ MFC 프로그래밍, 비주얼스튜디오 문제



당연히 요즘 추가된 신경 쓸 부분을 공부해야죠. 1999년에 지원 끊긴 MFC를 왜 먼저 공부합니까? 컨테이너 개념만 있고, 지원하지 않던 시기에 MFC 개발자는 컨테이너 응용 방법을 고민할 필요가 없었어요.


요즘은 고민해야죠. 가령, 전화번호부를 구현하는데, Map이 좋을까, Vector가 좋을까 고민해야 합니다. 90년대 개발자가 고민하던 것과 요즘 개발자가 고민할 내용이 다릅니다. 당연히 MFC 책부터 펼쳐서 공부하면 90년대 개발자가 고민하던 내용이나 2018년에 읽게 되겠죠.


이게 과연 생산적인 일이냐는 겁니다.

어차피 하늘에서 뚝 떨어진 기술은 없습니다. MFC가 생기고 MFC가 발전하며 C++ 프로그래밍 언어도 발전했습니다. 당연히 옛것을 알고 요즘 것을 익히는 것은 좋습니다. 이 자체가 잘못된 건 아닙니다. 하지만, 공부를 시작할 때 90년대에 머문 MFC 책부터 펼치고 공부하는 건 잘못됐다는 겁니다.


그 시간에 객체지향 프로그래밍 책과 순수 C++ 책을 펼쳐서 공부하세요. MFC는 어쩔 수 없이 사용하게 될 경우에 익혀서 쓰면 됩니다. 그러면 돼요.




그래도 MFC를 공부해야겠다면 생각해 보셔야 합니다. MFC 프로그래밍은 단순히 User와 GDI 서비스를 적절하게 클래스 라이브러리로 만든 것입니다. 오히려 숙련된 C++ 프로그래머와 능숙한 Win32 API 프로그래머를 위한 것입니다.



mfc 장점 비주얼 스튜디오Visual C++ MFC 프로그래밍, 비주얼스튜디오 문제



앞서도 말씀드렸듯이 C++ 공부를 먼저하고 MFC를 다뤄도 됩니다. 윈도우 생성 과정을 이해 못 한다고 C++ 다루지 못하는 거 아닙니다. 하지만 윈도우 생성 과정을 이해해야 MFC를 다룰 수 있습니다. 그러려면 C++ 지식이 기본으로 깔려있어야 합니다.


게다가 MFC는 일부 라이브러리를 모은 것이라 C++ 개발자가 다룰 수 있는 범위는 제한적입니다. 괜히 C#으로 UI를 만들고 C++로 엔진 구현하는 회사가 존재하는 게 아니란 뜻이죠.




MFC 공부를 시작하기 전에 C++ 공부를 먼저 하세요. MFC로 신규 프로젝트 진행하는 회사도 이젠 찾아보기 힘듭니다. MFC는 일부 업종과 10년 가까운 오랜 세월 서비스되는 솔루션을 제외하곤 거의 사용되지 않습니다. 요즘 윈도우 프로그래밍이라고 하면 C#을 먼저 떠올립니다.



mfc c++ 공부 차이Visual C++ MFC 프로그래밍, 비주얼스튜디오 문제


학교에서 코볼을 배우던 시기가 있었고, MFC를 배우던 시기가 있었습니다. 이건 옛날이야기죠. 아직도 MFC를 가르치는 교수가 있다면 저는 강력하게 자격 미달이라고 외치고 싶습니다. 요즘에 MFC를 배우는 건 코볼 배우는 거랑 무슨 차이가 있겠습니까.


프로그래머가 배워야 할 언어와 툴은 시대별로 다릅니다.




이 부분 때문에 아는 동생이랑 논쟁을 벌인 적도 있습니다.


MFC 개발자를 너무 무시하길래 그렇지 않다고 이야기했으나, 전체 맥락은 공감이 가더군요. MFC 아니면 일 안 하겠다고 회사 일 자체를 드롭시키던 무식한 인간이랑 일해본 경험이 있어서 그럴지도 모르겠습니다.



mfc 프로그래밍 시작Visual C++ MFC 프로그래밍, 비주얼스튜디오 문제



요는 이것입니다.


  1. C언어 개발자, C++ 개발자, MFC 개발자는 나눠서 생각할 필요가 있다
  2. 비주얼 스튜디오 2008에서 MFC 개발하는 사람을 C++ 개발자라 부를 수 있을까
  3. 그냥 MFC 개발자다
  4. VS2008에서 사용하는 C++ 표준이라고 해봐야 옛날 고전 문법 정도가 전부다
  5. C++ 지식이 있으니 MFC를 다루겠지만, MFC 영역에만 갇혀 있을 뿐입니다
  6. 좋게 이야기하면 C++ 개발자지만, 나쁘게 이야기하면 MFC밖에 안 다뤄봤다
  7. C++ 개발자라 하기엔 뭔가 부족한 느낌이다


글쎄요. 저는 판단이 잘 안 서네요.


  • 이런 논리라면 매번 언어를 새로 바꿔서 솔루션을 다시 제작해야 한다는 소린데, 그게 현실적으로 가능할까요?
  • 근데, 그렇지 않다면 고인 물이 되잖아요? 고인 물이 되면 갈라파고스처럼 고립될 뿐이겠죠?
  • 프로그래머는 계속 공부해야 하는데 대체 뭘 공부해야 할까요?


글쎄요. 참 어려운 문제입니다.


저는 아직도 정답은 모르겠습니다.




아무튼 결론은 C++ 공부하는 분들 제발 MFC책 부터 펼치지 마세요. 요즘 그걸로 프로젝트 진행하는 회사 거의 없어요. C++ 공부하면 나중에 쉽게 익힐 수 있습니다.


MFC 공부를 시작하려는 분들께, C++ WinAPI 기초




댓글(6)

  • gui어려워요
    2019.02.19 19:56

    그렇다면 2019년 현 시점에서도 winapi는 공부할만한 주제인가요? 그리고 질문 하나 더 드리면, windows에서 c#만으로도 커스터마이징한 프레임(타이틀 바, 버튼 등) GUI 제작이 가능한가요?

    -----

    김상형님 저의 winapi 책을 소장하고 있지만 공부할 엄두는 안나네요. 20년 전에 나온 책이 현 시점에서 최선의 책이라는 점에서도 사람들이 winapi를 학습하지 않는 것인가라는 의문도 들고요.

    • 2019.02.19 20:58 신고

      이게 참 어려운 질문이고 대답하는 사람도 신중해야 하는데요.

      신입 기준으로 공부 순서를 보면 당장 winapi를 배울 필요가 있을진 모르겠습니다. 기초 문법과 응용을 키우고 세부 내용을 다뤄야 하는데, 응용력 키우기전에 세부 내용 공부하는 게 과연 효율적일까 싶어요.

      물론, 공부하는 것도 좋긴 한데 순서를 뒤로 미루자는 거죠.

      그리고 c#은 gui 제작이 되게 편합니다. 타이틀 바, 버튼 등 마우스 클릭 몇 번으로 구현됩니다. 그래서 fa 반도체 분야에선 mfc -> c# 넘어가는 추세입니다.

      결론적으로 아예 처음이라면 winapi 보단 기초 문법과 응용력 키우는 문제를 풀어보세요. 그 다음에 api 공부하는 걸 추천합니다.

  • 웅웅
    2020.08.02 16:10

    그럼 요즘 회사에서는 Qt를 자주쓰나요? 응용프로그래밍을 위한 요즘 쓰이는 프레임워크는 무엇인가요??

  • 2020.08.13 23:26

    비밀댓글입니다

    • 2020.08.17 10:46 신고

      특정 언어를 판다는 의미보단 전반적인 프로그래밍 지식과 기반을 쌓는다는 식으로 접근하는 게 좋아요.

      프로그램도 혼자서 만든다면 깊이있는 부분보단 다양한 부분으로 나가는 게 좋고, 이제 시작하신다면 CS보단 웹이 전망 좋습니다.

      웹 중에서도 최근엔 프론트엔드가 각광 받고 있죠. 파이썬도 전망 좋고요.

      결론적으로 MFC에 시간 쏟기보단 다른 언어를 공부하는 걸 추천하고 싶습니다.

Designed by JB FACTORY