게임 개발자에게도 ‘슈퍼 프로그래밍 언어’ 있다

[테크홀릭] 1952년 냉전 최종 종결자로 만들어진 B-52 스트래토포트리스(Stratofortress)는 1955년 실전 배치 이후 베트남 전쟁에서 300만 톤에 달하는 폭탄을 투하, 베트남을 불바다로 만들기도 했다. 이런 강력한 성능과 장거리 운행 능력 덕에 B-52는 기체 기능을 꾸준히 하면서 현대 전자전에 적합하게 업그레이드를 했다.

게임 개발자에게도 ‘슈퍼 프로그래밍 언어’ 있다

스텔스와 드론이 대세인 지금 아버지가 비행하던 B-52를 아들이 맡는 일이 지금 세대에서 일어나고 있다. B-52가 전지구적인 공격 능력을 과시한 전쟁이 있었다. 사막의 폭풍 작전에선 미국에서 이륙해 이라크를 중간 급유 없이 폭격하고 돌아왔다고 한다. 사막의 폭풍 작전 기간 중 B-52는 전체 폭탄 투여 가운데 40%를 맡았다. B-52는 2045년 퇴역 예정이라고 하니 할아버지에서 손자가 비행하는 백년 운용 기체가 될 것으로 보인다.

게임 개발자에게도 ‘슈퍼 프로그래밍 언어’ 있다

◇ 게임 업계의 B-52=게임과 프로그래밍 업계에서도 이런 밀레니엄 슈퍼 언어가 있다. 바로 C/C++이다. 게임 프로그래머가 되려면 인터넷이 없던 시절에는 터보C(Turbo C) 21 완성 같은 걸 보거나 어느 일본 프로그래머가 쓴 GW-BASIC RPG 만들기를 보고 게임 개발의 꿈을 키워야 했다. 물론 많은 시행착오도 뒤따랐다.

요즘은 정보의 바다에서 너무 많은 정보가 광범위하게 검증되지 않은 주장까지 무차별적으로 얹어져 퍼진다. 결론적으로 말하면 이런 생활코딩은 별 도움이 되지 않는다. 취미로 생활에서 코딩을 하면 그냥 취미다. 실제 개발과 연결되기는 어렵다.

컴퓨터 언어는 기계에서 어셈블리, C언어에서 객체지향언어(Object Oriented Programming)로 진화해왔다. 원래 A라는 언어에서 B라는 언어가 만들어졌고 C라는 언어가 유닉스라는 OS가 C로 개발되면서 대세가 됐다. 개발자가 제품의 네이밍을 못 짓는 전통은 C언어에서 볼 수 있고 마이크로소프트에서도 마찬가지다.

컴퓨터 언어는 특정 회사의 헤게모니를 쥐고 흔드는 게 아니라 생산성과 유지 보수의 편리함이 선택의 기준이다. 현대 프로그래밍 언어 역시 생산성이라는 일관된 관점에서 발전하고 있다.

프로그래밍 학습에는 무협지에서 정파가 있듯 정종심법과 정파 무공이 있다. 서버 프로그래밍으로 가든 게임 클라이언트로 가든 C/C++은 기본 언어의 자리를 지키고 있다. 그런데 주의할 점은 C/C++은 지금도 발전하고 있는 언어라는 것이다.

C++은 AT&T 벨연구소의 비야네 스트롭스트룹이 1983년 만든 언어다. 짐작하듯 C언어에 객체지향적인 특성을 더한 것으로 처음 명칭은 ‘C with Classes’였다. 처음 HP 머신에서 동작하던 C++ 컴파일러의 경우 ‘Hello world’ 하나만 출력하는 프로그램 바이너리 사이즈가 2.1MB에 달할 만큼 크고 느렸다. 사실 당시에는 C++ 소스를 C 언어 소스로 변환해서 실행 파일을 만들었다.

물론 컴파일러 최적화가 진행되면서 실행 파일 크기와 컴파일 속도, 실행 속도에 있어서 타 언어와는 비교할 수 없게 됐다.

C와 C++이 상호 호환성이 높았지만 지금은 C99라는 C언어 산업 표준(ANSI, ISO)이 나오면서 C++과의 언어적인 호환성은 완전히 분리됐다. 이 시점에서 대부분 프로그래머가 C++을 선호하면서 gcc와 VC 등 메이저 컴파일러는 C++의 언어 표준 지원에 주력했다. 이는 특정 회사의 정치적 헤게모니보다 생산성 입장에서 냉정한 선택을 한 것이다.

◇ 현대 언어의 특징은 생산성=1980년대 C++과 지금의 C++을 비교한다면 B-52처럼 틀만 같을 뿐 언어적 개선이 상당 부분 이뤄졌다. 많은 프로그래머 지망생을 좌절케 한 포인터와 메모리 관리에 대한 개선이 집중적으로 이뤄진 게 바로 2014년 지금의 모던 C++이다. C/C++의 장점은 다음과 같다.

닌텐도 게임보이부터 PC, 스마트폰, 비행기 제어 프로그램까지 폭넓게 지원한다.

주요한 게임 3D 엔진이 C/C++을 지원한다.

언어를 배우기 위한 서적, 인터넷 강의, 튜토리얼이 풍부하다.

그렇다면 C/C++을 배우고 선택할 때 주의할 점은 무엇일까.

최신 C++을 배워라(모던 C++이라고 부른다.).

최신 C++은 생산성도 높고 코딩 라인 수도 적다.

2000년 이전 C/C++ 책보다 최신 책을 선택하라.

최신 컴파일러( Visual C++ 2013, 최신 gcc)를 선택하라.

오래된 문법은 필자 하나로 족하다. 21세기에 살고 있지만 지금도 20세기 말에 만든 터보 C 3.0(Turbo C 3.0) 라이브러리를 사골처럼 우려먹고 있지 않은가. 오래된 C/C++ 서적과 관련 강좌는 예비 프로그래머를 좌절시킬 대목으로 가득하다. 구조체나 생성자, 변수 등 일본식 조어로 된 이해 못할 문구와 지금은 구닥다리가 된 문법이 그것이다. 최신 문법을 배워야 하는 이유다.

자동차도 3년을 타면 유지보수비용과 안전을 위해 새 차를 사기도 한다. 프로그래머는 너무 보수적인 면으로 인해 모던 C++ 도입이 느리다. 하지만 생산성과 장기적인 유지보수 입장에서 보면 모던 C++ 도입은 지상 명제다. 모던 C++을 이해하기 위한 동영상은 다음과 같다. 모던 C++을 배우기 위한 충실한 튜토리얼은 이곳에서 확인할 수 있다.

그렇다면 요즘 유행 언어는 어떤 관점으로 봐야 할까. 현대 언어에는 명확한 목적이 있다. 바로 생산성이다. 그리고 웹에서 생산성이 좋다든지 메모리 관리를 자동으로 한다는 등 명시적 특징이 있다. 문법적으로 봤을 때 C#과 자바(Java)는 상당히 유사해 일부 소스만 본다면 구분하기 힘들다. 따라서 C++을 배웠다면 현대 언어, 루비와 파이썬, 펄, C#, 자바 등을 배우는 데 큰 러닝 코스트가 들지 않는다.

게임 회사 역시 모바일 게임 시대로 접어들면서 C#이나 PHP 등 사용폭을 넓혔지만 역시 주력은 C++이다. 애플이 새 언어인 스위프트를 내놨지만 고성능 3D 게임을 여러 플랫폼에서 개발하려면 아직까지 C++이 최적의 답이다. 컴퓨터 언어는 생물처럼 살아있고 진화하고 있다. 덕분에 프로그래머는 늘 공부해야 할 숙명에 놓여 있다.

전자신문인터넷 테크홀릭팀

김호광 칼럼니스트 techholic@etnews.com