소년코딩

C++ 잡담. Window API

window

이 글의 내용은 존경하는 codesafer님의 글을 각색하였습니다.

C (프로그래밍 언어)

C 언어는 크리스마스 장난처럼 만들어진 언어다. 게임을 만들려니 어셈블리가 불편했고, 그래서 PASCAL, B, BCP을 베껴 뚝딱 만든 게 C 언어다. 그 게임이 돌아가도록 운영체제가 필요했고, 그래서 빠르게 만든 게 Unix란 운영체제다. 개발 동기에 대해 여러 가지로 희화한 버전이 있지만 이 정도만 알아두어도 좋다. 컴퓨터의 역사에서 초창기에 만들어진 모든 것들은 사실 그다지 복잡하지 않다. 오히려 간결하여서 처음엔 어렵게 어겨질 수 있는 정도다.


include 없이 printf를 구현하기는 어렵다. C 언어 문법 그 자체는 램 말고 하드웨어를 건드릴 수 있는 여지가 없기 때문이다. 따라서 표준 라이브러리를 통해 운영체제가 제공해주는 API(Application Programming Interface)를 사용해야만 화면에 무언가를 찍을 수 있고, 키보드나 마우스로부터 무언가를 입력받을 수 있다.

더욱더 LowLevel 로 내려가서 본인이 직접 구현할 수 있다. BIOS를 직접 제어하든, 심지어 CPU를 직접 설계할 수도 있다. 하지만 이 방법이 효율적이고 실용적인 목적이 있지 않다면 지속하기는 힘든 작업일 것이다.


api API는 운영체제를 개발하는 개발사에서 만들고 손보게 된다. 표준 라이브러리는 컴파일러를 개발하는 개발 도구 제작사에서 만들고 손보게 된다. 이 말은, 새로운 하드웨어가 등장하고 스펙이 변화되면, 그 변화를 다른 사람들이 책임지고 손봐서 적용해 준다는 뜻이다. 그래서 바퀴를 재발명 하지 말라는 이야기가 있다. 

즉, 본인이 하드웨어의 변경점 마다 모든 걸 다시 개발할 의지가 없다면, 있는 걸 잘 써주는 게 필요하다. (있는 게 자기의 요구사항을 충족시켜 줄 경우)


하지만 API는 지저분하다. 틀딱 선배님들이 젊은 시절에 열심히 만들어둔 운영체제 틀은 수많은 수정요구로 타협하고 수정되고 버려지고 대체되면서 시궁창이 되어버렸기 때문이다.

주로 사용하는 Window API는 쓰레기도 이런 쓰레기가 없을 정도다. 그걸 조금 편해 보겠다고 객체 같지도 않은 MFC로 싸버렸으나 노답인건 매한가지다. 상대적으로 진보적인 프레임워크였던 VCL의 개발 책임자를 사와서 .Net을 만들었으나 .Net 환경 프로그래밍 또한 그렇게 매력적이지 않다. (물론 MFC보다는 낫다)

가장 큰 데스크탑 시장의 개발환경을 과감히 포기할 용기가 없다면, 이 그지 발싸개 같은 운영체제를 우리는 써야 하고 배워야 한다. 다행스럽게도 당신이 좋은 프레임워크를 선택한다면, 그지 발싸개랑 대화하기 위해 그지 발싸개를 이해하는 데 필요한 시간을 줄일 수 있다.


여기서 이 글을 읽는 당신은 선택해야 한다.

  • 여러 운영체제용으로 포팅된 프레임워크를 이용해 조금 더 상위 레벨에서 프로그래밍할 것인가? 이를 통해 다른 운영체제에서도 쉽게 돌아갈 수 있는 프로그램을 만들 수 있다.
  • 그지 발싸개 같은 Window API를 한없이 공부해서 "난 빌 게이츠를 사랑해요!"를 외칠 것인가? 미안하지만 이 공부는 최소한 하는 게 낫다. 윈도우 디바이스 드라이버를 자유자재로 만들면서 먹고 살 틈새를 기대하는 것이라면... 말리지 않겠다.
  • .Net 기반 환경에서 개발할 것인가? CLI라는 인터페이스가 있으나 이건 C++이 아니라고 보는게 맞다. 그럴거면 차라리 C#을 쓰자.

다시한번 말하지만 Window API는 쓰레기다. 하지만 제법 두꺼운 콘크리트 기반을 깔고 산다면 지하가 쓰레기 매립지인줄 모르고 살 수 있다. 그러니 정신건강을 생각한다면 Window API를 대체할 무언가를 선택하는 게 좋다. GUI가 필요하다면 OpenGL 기반의 여러 프레임워크들이 준비되어 있다.


결론은 조금 더 편하고 조금 더 진보적인 프레임워크를 선택하라는 이야기다. 초보자들이 사용하기 편리한 프레임워크들이 있다면 아래 댓글로 여러 사람이 추천해줬으면 좋겠다.


'C++ 이야기 > 잡담' 카테고리의 다른 글

C++ 잡담. STL  (2) 2018.01.15
댓글 로드 중…

블로그 정보

소년코딩 - 소년코딩

소년코딩, 자바스크립트, C++, 물리, 게임 코딩 이야기

최근에 게시된 이야기