게임 개발자는 결국 언리얼, 유니티, 자체 엔진 중 하나를 써서 게임을 만들게 된다. 이 중 언리얼을 사용하는 경우 C++로 스크립트를 작성하게 된다. 유니티를 사용하는 경우 C#으로 스크립트를 작성하게 되지만, 유니티 자체는 C++로 만들어져 있으며 IL2CPP로 빌드하면 유저가 입력한 C# 코드도 C++ 코드로 변환된다. 자체 엔진을 사용하는 경우에도 마찬가지로 C++로 코드를 작성하게 될 가능성이 높다.
게임 업계에서 C++을 사용하는 경우가 대부분이기 때문에 게임 개발자는 결국 C++을 배울 수밖에 없다. 여기서 궁금해질 수밖에 없는 부분은 "왜 게임 업계에서는 C++을 사용하는가?" 이다.
이 이유를 알기 위해서는 프로그래밍 언어의 발전 과정에 대해 알아 볼 필요가 있다.
프로그래밍 언어의 발전 과정
기계어
먼 옛날에는 기계어로 직접 코딩을 했다고 한다. 0과 1만으로 구성된 코드를 작성하는 건 생각만해도 끔찍한 일이다.
어셈블리어
기계어로 직접 코딩을 하는 불편함을 해소하고자 어셈블리어가 탄생했다. 어셈블리어의 명령어는 (대체로) 기계어와 1:1 로 치환된다. 뿐만 아니라 어셈블리어를 사용하면 주석을 달거나 상수를 선언할 수 있는 등의 이점을 챙길 수 있다.
고급 언어
이후 기계어를 직접 번역한 수준을 넘어 사람이 이해하기 쉬운 방식으로 프로그램을 작성할 수 있는 고급 프로그래밍 언어들이 탄생했다. 대표적으로 C, C++, Java, C#, Python 등의 언어가 고급 언어에 속한다.
고급 언어 중에서도 C와 C++는 메모리에 직접 접근할 수 있기 때문에 Java, C#, Python과 같은 언어들보다는 저급 언어로 분류된다.
요약
[저급 언어] 기계어 → 어셈블리어 → C → C++ → Java, C#, Python [고급 언어]
지금까지 이야기한 내용을 요약해보면 다음과 같다. high level로 갈수록 프로그래머의 권한(하드웨어에 직접 접근할 수 있는 권한)이 줄어드는 대신 편의성이 증대한다. 예를 들어, 어셈블리어와 같은 저급 언어로 코딩을 하다보면 조금만 실수해도 심각한 버그를 만들어 낼 수 있다. 반면, Java와 같은 고급 언어를 사용하면 언어 차원에서 GC 등의 기능을 제공함으로서 개발자의 실수로 프로그램이 망가질 가능성이 크게 줄어들게 된다. 따라서 개발자는 큰 고민 없이 원하는 프로그램을 쉽게 작성할 수 있게 되고 생산성이 크게 증대된다.
게임 개발에 Java, C#을 쓰면 안될까?
고급 언어는 결국 기계어로 번역된다. 기본적으로 C, C++은 Java나 C#보다 기계어에 더 가깝기 때문에 똑같은 기능을 하는 코드를 작성하더라도 더 적은 줄 수의 기계어로 번역되는 경우가 많다. 일반적으로 기계어 줄 수가 많은 Java, C#은 더 느리게 실행될 가능성이 크다.
뿐만 아니라, OS에서 바로 실행되는 C, C++와 달리 Java, C#은 가상 머신을 거쳐서 실행되기 때문에 실행 속도가 느릴 가능성이 크다.
게임에서는 속도가 굉장히 중요하다. 일반 애플리케이션에서는 미세한 수준의 렉이 생기더라도 유저가 체감을 하지 못할 가능성이 높다. 반면, 게임 유저들은 성능에 굉장히 민감하다. 예를 들어, FPS 게임에서 몇 프레임 수준의 렉이 생기더라도 유저들의 불만이 쏟아질 것이다.
그러면 C를 쓰면 안될까?
게임에서는 객체 지향이 굉장히 중요하다. 예를 들어, 몬스터를 하나 만들어야 된다고 해보자. 몬스터는 체력, 공격력, 방어력이라는 속성을 가지고 있어야 한다. 또 몬스터는 막는다, 이동한다, 공격한다는 행동을 할 수 있어야 한다. 객체 지향 프로그래밍을 사용한다면 위와 같은 성질을 갖는 몬스터를 손쉽게 표현할 수 있을 것이다.
하지만, C는 문법적으로 객체 지향을 지원하지 않는다. C로 위와 같은 성질을 갖는 몬스터를 표현하기 위해서는 수많은 변수와 함수를 반복적으로 만들어야 할 것이다. 즉, C는 객체 지향 측면에서 '많은 종류의 몬스터를 찍어낸다'는 작업에 대해 생산성이 굉장히 떨어지는 언어라는 것이다.
특히 게임은 프로젝트의 규모가 굉장히 큰 경우가 많기 때문에 생산성이 떨어지는 C를 통해서는 주어진 시간 안에 개발을 마치지 못할 가능성이 크다.
결론
속도와 객체 지향 프로그래밍이라는 두 마리 토끼를 다 잡기 위해서는 게임 개발에 C++를 사용하는 것이 합리적인 선택이다.
'프로그래밍 언어 > C·C++' 카테고리의 다른 글
[C++] 3. 기본 제공 코드 분석 (0) | 2023.12.12 |
---|---|
[C++] 2. Visual Studio 사용해보기 (0) | 2023.12.12 |
Array에 대한 몇 가지 사실 (0) | 2022.06.25 |
const and pointer (0) | 2022.06.25 |
선언이란? (feat. Array and Pointer) (0) | 2022.06.25 |