삽질의 현장/- 윈도우 API

#001_WIndow_API_Intro

shovelman 2015. 9. 7. 16:21


안녕하세요 삽잡이입니다.

오랜만에 혼자놀기를 다시 시작하게 되었습니다.


우선 오늘은 간략하게 Window API에 대해서 알아보도록 하겠습니다.


기본적으로 윈도우 API를 사용하기 위한 서적들을 참고하여 본다면,

반드시 포함되어 있는 함수들이 두개가 있습니다.

바로, WinMain 함수와 WndProc 함수입니다.


조금 오버를 더해 이 함수들을 통해 API 함수들이 만들어진다고 해도 

어느정도 맞다고 볼 수 있다는 것이지요...


이 두 함수는 WIndow API 와 관련하여 거의 99% 있어야 합니다.

물론 더 세부적으로 말하자면 WinMain 함수는 반드시 있어야하지만,

WndProc 함수는 다른 놈으로 바꿀 수도 있다고 할 수 있습니다.


Process는 실행중인 프로그램을 말합니다.

좀 더 자세하게 말씀드리자면, Program의 Instance를 Process라고 부릅니다.

즉, 프로그램을 진짜로 실체화 해서 실행하면 프로세스가 된다고 하는 것이지요.


프로세스는 기본적으로 명령어 영역을 가지고 있습니다.

그중 가장 기본적인 API 영역으로 UI와 Code(명령어) 영역으로 나눌 수 있습니다.

Code 영역은 로직이라고도 하는데, 

이는 어떤 문제를 해결하는데 사용되는 명령어 영역이라고 할 수 있습니다.


Code 영역은 눈에 보이는 영역이 아닙니다. 

아직 잘 감이 안오시겠지만, 이 보이지 않는 영역을 두개의 코드로 나뉠 수 있게됩니다.

바로 WinMain과 WndProc으로 나뉠 수 있게 되는 것입니다.


WinMain 함수는 실행하는 역할을 담당하고 있습니다.

즉, 프로그램을 구동(실행) 시키는 역할을 한다는 것입니다.


WndProc 함수는 메시지를 저리하는 작업을 합니다.

즉, 메시지에 따르는 행동을 보이는 곳이라고 할 수 있죠. 

더 쉽게 말씀드리자면, 사용자로 부터온 메시지를 통해 반응을 하는 곳이라고 할 수 있습니다.


메시지를 처리하는 행동을 하는 함수를 프로시저라고 부릅니다.

프로시저는 여러개 있을 수 있습니다. 

그렇기 때문에 위에서 언급했듯이, WndProc 함수는 다른 놈으로 바꿀 수 있다고 한 것이지요.

하지만, WinMain 함수는 반드시 하나만 존재합니다.


지금까지 Code 영역에 대해서 살펴보았습니다.

다시한번 정리하자면, Code 영역은 보이지 않는 영역으로 되어있다고 했습니다.



그렇다면, 우리에게 보이는 UI에 대해서 썰을 풀어보도록 하겠습니다.

UI는 간단하게 User와 '이'야기 하는 놈을 말합니다. 즉, User Interface 이지요...


이 UI는 GUI와 CUI로 구분할 수 있습니다.

즉, 그래픽 기반과 텍스트 기반으로 구분할 수 있다는 것입니다.

GUI에서는 창이라고 하여 WIndow가 존재하게 됩니다.


단지 C/ C++에 대해서만 알아봤던 저와 같은 학생들이 있다면,

우리는 지금까지 Command / Console 기반으로 하는 UI 만을 사용했었다는 것을 알 수 있습니다.

즉, 우리가 지금까지 사용한 UI는 모두 텍스트로 입력받고 출력하는 UI라는 것입니다.


하지만 Window API를 배움으로써

GUI인 Window를 사용해서 사용자와 대화를 진행 할 수 있게되었습니다.


정리해서 말씀드리자면,

우리는 GUI인 Window를 통해 사용자에게 접근하고

실제 행동을 Code 영역에 의해 처리되는 과정을 살펴볼 수 있게 되었다는 것입니다.


실제 행동을 처리하는 Code 영역의 WinMain 함수는 어떻게 구성되어 있을까요?

WinMain 함수는 세가지 영역으로 나뉠 수 있습니다.


우선, 어떤 윈도우를 만들 것인지에 대한 WndClass를 등록하는 것입니다.

윈도우가 어떻게 만들어질 것인지에 대해서 RegisterWindow() 함수를 사용하여 등록을 하는 것입니다.


다음으로, Window를 생성하게 됩니다. 이는 CreateWindow() 함수를 통해 생성하게 됩니다.


마지막으로, 메시지 루프 과정을 거칩니다. 다른 말로 메시지 펌핑이라고도 부릅니다.

또 다른 말로는 메시지를 읽어와서 디스패치 시킨다고 말하기도 합니다.

이는, 어떠한 실행을 하기 위해서 메시지가 입력됬는지 확인하고 처리하는 과정을 말합니다.


이 세가지 과정을 우리는 Window API Process 라고 할 수 있습니다.

API는 Aplication을 Programming을 하기 위해 제공되는 Interface라고 부를 수 있습니다.


즉, API는 OS에서 제공하는 Application을 사용할 수 있는 라이브러리라고 할 수 있는 것입니다.

또한, 어플리케이션을 만드는데 있어서 OS와 통신하는 놈이라고 할 수 있다는 것입니다.

다른 말로 모두 OS가 제공하는 것을 사용한다는 것입니다.