C++는 콘솔·PC 게임과 언리얼 엔진에서 쓰이는 대표 언어입니다. C의 문법 위에 클래스와 템플릿 같은 기능을 더해, 큰 프로그램을 나눠 관리할 수 있게 만든 언어입니다. 이 글은 C를 조금 아는 사람이 C++로 넘어갈 때 꼭 알아야 할 기초 문법을 게임 코드 관점에서 정리합니다.
C와 달라지는 첫 부분: 입출력, 네임스페이스, 참조
C에서 printf로 출력하던 것을 C++에서는 cout을 많이 씁니다. 표준 라이브러리 이름은 std라는 네임스페이스(이름 묶음) 안에 있어서 std::cout처럼 씁니다. 네임스페이스는 이름이 겹치지 않게 칸을 나누는 장치입니다.
참조(&)는 C++에서 새로 생긴 중요한 개념입니다. 기존 변수에 별명을 붙이는 것으로, 함수에 큰 데이터를 넘길 때 복사 없이 원본을 다룰 수 있게 해 줍니다. 포인터보다 안전하고 문법이 간단해 게임 코드에서 자주 쓰입니다. 값을 바꾸지 않을 때는 const 참조로 넘겨 실수를 막습니다.
bool 자료형과 true, false가 기본으로 들어 있다는 점, 변수를 함수 중간 어디서든 선언할 수 있다는 점도 C와 다른 부분입니다. auto를 쓰면 컴파일러가 자료형을 알아서 정해 주지만, 처음에는 자료형을 직접 적어 보며 익히는 편이 좋습니다.
클래스와 객체: 몬스터를 코드로 정의하기
클래스는 데이터와 기능을 하나로 묶은 설계도입니다. 몬스터 클래스라면 체력·공격력 같은 멤버 변수와, 이동·공격·피격 같은 멤버 함수를 함께 가집니다. 이 설계도로 실제로 만든 몬스터 하나하나가 객체입니다.
- public: 다른 코드가 자유롭게 쓸 수 있는 부분
- private: 클래스 안에서만 쓰는 부분, 체력 같은 값을 함부로 바꾸지 못하게 보호
- protected: 상속받은 자식 클래스까지만 쓸 수 있는 부분
생성자와 소멸자
생성자는 객체가 만들어질 때 자동으로 불리는 함수로, 초기 체력이나 위치를 설정하는 데 씁니다. 소멸자는 객체가 사라질 때 불리는 함수로, 빌려 쓴 메모리나 파일을 정리하는 데 씁니다.
게임은 객체가 쉴 새 없이 생겼다 사라지는 프로그램입니다. 총알, 이펙트, 몬스터가 모두 그렇습니다. 생성과 소멸 시점에 무슨 일이 일어나는지 정확히 아는 것이 메모리 문제를 막는 출발점입니다.
오버로딩, 상속, 가상 함수
| 문법 | 뜻 | 게임 예시 |
|---|---|---|
| 함수 오버로딩 | 이름은 같고 매개변수가 다른 함수 여러 개 | Damage(int), Damage(int, 속성) |
| 연산자 오버로딩 | +, == 같은 연산자의 동작을 직접 정의 | 벡터 두 개를 + 로 더하기 |
| 상속 | 부모 클래스의 기능을 물려받음 | Monster를 물려받은 Slime, Dragon |
| 가상 함수(virtual) | 자식 클래스가 동작을 바꿔 쓸 수 있게 함 | 몬스터마다 다른 Attack() |
가상 함수를 쓰면 부모 타입 목록 하나로 서로 다른 몬스터를 한꺼번에 관리하면서도, 각자 다른 공격을 하게 만들 수 있습니다. 이것이 다형성이며 객체지향의 핵심 개념 중 하나입니다.
STL과 스마트 포인터
STL은 C++ 표준 라이브러리에 들어 있는 자료구조와 알고리즘 묶음입니다. 크기가 바뀌는 배열인 vector, 키로 값을 찾는 map과 unordered_map, 정렬하는 sort 등을 직접 만들지 않고 바로 쓸 수 있습니다.
스마트 포인터(unique_ptr, shared_ptr)는 메모리를 다 쓰면 자동으로 돌려주는 포인터입니다. new로 만든 객체를 delete하지 않아 생기는 메모리 누수를 줄여 줍니다. 다만 언리얼 엔진은 자체 메모리 관리 방식이 있으므로, 엔진 안에서는 엔진 규칙을 따릅니다.
공부 순서와 다음 단계
- 참조와 const를 익히고 함수에 값을 넘기는 방식을 비교해 봅니다.
- 클래스로 플레이어와 몬스터를 만들고 전투를 콘솔로 구현해 봅니다.
- 상속과 가상 함수로 몬스터 종류를 늘려 봅니다.
- STL vector와 map으로 인벤토리를 만들어 봅니다.
SBS아카데미게임학원 게임프로그래밍 과정은 C언어·C++ 기초와 객체지향 개념을 먼저 다진 뒤 WinAPI와 엔진 실습으로 이어집니다.
자주 묻는 질문
C++는 C보다 훨씬 어렵나요?
문법의 양은 더 많지만 기초 단계는 C를 알면 금방 따라갈 수 있습니다. 템플릿이나 고급 기능은 실제로 필요할 때 배워도 늦지 않습니다.
언리얼 엔진을 하려면 C++를 꼭 알아야 하나요?
블루프린트만으로도 기능을 만들 수 있지만, 프로그래머 직군으로 지원한다면 C++ 문법과 엔진의 C++ 구조를 함께 아는 것이 일반적으로 요구됩니다.
