본문 바로가기
IT 공부/Windows 개발

[Windows] - 윈도우즈 시스템 프로그래밍에 대해 가졌던 오해

by exdus3156 2024. 12. 22.

 

▷ 윈도우즈 시스템 프로그래밍이란 쉽게 말해, Windows가 제공해주는 C/C++ Windows API 라이브러리를 사용해 Windows에서 동작하는 소프트웨어를 만드는 것을 말한다. 대부분의 API를 windows.h 파일에 찾을 수 있다.

 

처음에 나는 이걸 착각해서, Windows API를 사용해 GUI를 만드는 것을 시스템 프로그래밍이라고 오해했다. 틀린 말은 아니지만, 시스템 프로그래밍은 GUI 뿐만 아니라 Windows 시스템 전반의 기능을 활용할 수 있는 프로그래밍이다. 따라서 콘솔 환경에서만 동작하는 Windows 시스템 프로그램도 가능하다.

 

이렇게 말하면 C/C++ 표준 라이브러리를 놔두고 왜 굳이 또 Windows API를 사용해야 하는지 의문이 들 수 있다. 그러나 C/C++ 표준만으로는 해결할 수 없는 문제들이 있다. 성능 최적화, 멀티스레딩, 프로세스 생성, 그래픽과 같이 별도로 특화된 하드웨어를 사용해야 하는 것들이 있다. 그러나 C/C++ 표준은 표준이라서 지극히 일반화된 문제만 해결한다. 동작 환경도 콘솔 환경으로 제한되어 있다.

 

쉽게 말해, 표준 라이브러리만으로는 할 수 없는 일을 하기 위해서다.

 

C/C++의 표준이 오늘날 대중적인 GUI나 멀티미디어 등을 지원하지 않거나 미약하게 지원하는 이유는 C/C++이 표준성, 이식성과 호환성을 중시하기 때문이다. 복잡한 기능으로 갈수록 표준을 잡기 어려울 정도로 기술이 플랫폼/하드웨어마다 종류와 복잡성이 방대해진다. 그래서 C/C++ 표준은 저수준 환경에서의 보편적인 동작만 표준으로 정의하고, 나머지 복잡한 기능은 그 플랫폼의 환경에 맡긴 것이다.

 

아무리 C/C++ 표준도 꾸준히 표준을 확장하고 발표한다고는 하지만 한계가 있다.

 

물론 Java와 같이 아예 처음부터 응용 애플리케이션 설계를 위해 플랫폽 독립 가상머신을 개발한 경우도 있다. Java는 C/C++ 표준이 커버하지 않는 많은 기능도 표준으로 정의했다. swing 같은 라이브러리로 GUI도 개발 가능하다. 그러나 플랫폼마다 기술적 기반과 API가 다 달라 모든 기능을 추상화하기도 힘들 뿐더러, 특정 플랫폼에 특화된 시스템은 추상화할 수도 없다.

 

C/C++ 표준 라이브러리와 함께 운영체제의 기능에 조금 더 가까운, 그러니까 운영체제의 근본적인 저수준 기능과, 운영체제라는 플랫폼이 발전하면서 추가되는 여러 기능들을 활용해서 API를 사용한 소스코드를 짜면 그게 시스템 프로그래밍이다.