유니티에 비해 언리얼은 클래스 등록 절차가 다소 시간이 걸리고 복잡해 보입니다.
이것은 언리얼 자체의 문제라기 보다는 지원하는 언어가 C++ 이라는 보다 근본적인 이유에 있습니다.
1. C# 과 C++ 의 근본적인 차이
C# 과 C++의 가장 큰 차이는 런타임에 클래스 정보를 가져올 수 있느냐의 차이입니다.
용어로는 리플렉션이라고 하는데 C# 은 런타임에 리플렉션을 지원하는 언어입니다.
쉽게 설명하면, 프로그램이 실행 중일 때, 클래스 이름, 멤버 변수, 함수 정보 같은 타입 정보를 런타임에서 확인할 수 있다는 의미입니다.
반면 C++은 런타임에 클래스 정보를 조회할 수 없는 언어입니다. 언어 차원에서 리플렉션을 지원하지 않기 때문입니다. 따라서 프로그램이 실행된 이후에는 이 클래스가 어떤 멤버를 가지고 있는지 어떤 함수가 정의되어 있는지를 언어 차원에서 알 방법이 없습니다. 이 차이로 인해 C++ 이 성능에서는 우위에 있지만, 개발 과정에서는 불편함으로 작용합니다.
2. 컴파일 타임에 리플렉션을 구현하여 해결
C++에는 리플렉션이 없기 때문에 언리얼 엔진은 컴파일 타임에 리플렉션과 유사한 시스템을 직접 구현했습니다.
그 대표적인 수단이 다음과 같은 매크로들입니다.
UCLASS
USTRUCT
UPROPERTY
UFUNCTION
이들은 C++ 문법이 아니라 엔진에게 이 클래스와 멤버를 등록하라는 표식입니다.
언리얼은 이 표식을 통해 에디터, 블루프린트, 직렬화, 네트워크 등에서 사용할 정보를 미리 수집합니다.
3. UHT 의 역할
이 작업을 담당하는 것이 UHT (Unreal Header Tool) 입니다.
UHT 는 C++ 컴파일러가 아니라, 언리얼 전용 도구입니다.
헤더 파일을 읽어서 엔진이 사용할 메타 정보를 생성하고 자동으로 필요한 코드들을 만들어냅니다.
이 과정에서 generated 헤더 파일이 생성되고 클래스 정보가 엔진에 등록됩니다.
4. 왜 엔진을 다시 실행해야 할까
헤더에 클래스 구조가 변경되면 UHT 가 다시 실행되어야 합니다.
리플렉션 정보 자체가 다시 만들어져야 하기 때문입니다.
그 결과 클래스 등록, 코드 생성, 컴파일, 엔진 재구동 이라는 비교적 복잡한 과정을 거치게 됩니다.
유니티는 이 과정을 C# 의 런타임 리플렉션으로 처리합니다.
그래서 이런 복잡한 단계가 없고 개발자 입장에서는 훨씬 개발 친화적으로 느껴집니다.
5. 블루 프린트
언리얼의 클래스 등록 절차가 복잡한 이유는 엔진 설계의 문제가 아니라 C++이라는 언어의 근본적인 한계 때문입니다. 언리얼은 이 문제를 블루프린트라는 리얼타임 리플렉션 시스템으로 어느 정도 해결했습니다.
블루프린트는 C# 처럼 동작하기 때문에 C++에 비해 느릴 수는 있지만 개발의 용이함이라는 큰 장점이 있습니다.
최근에는 컴퓨터 성능이 크게 향상되었기 때문에 C#으로도 충분히 게임을 만들 수 있는 것처럼 블루프린트를 과도하게 남발하지 않는다면 가성비 좋은 선택이 될 수 있습니다.
'Unreal' 카테고리의 다른 글
| 언리얼5 단축키 모음 (0) | 2026.01.13 |
|---|---|
| 언리얼의 블루프린트란 무엇인가? (0) | 2026.01.11 |
| 언리얼 엔진의 기본 상속 구조 (0) | 2025.12.27 |
| 특이한 언리얼 좌표계와 회전 방향 (0) | 2025.12.13 |
| 왜 언리얼 엔진은 C++ 표준 라이브러리를 그대로 사용하지 않을까 (0) | 2025.12.10 |