언리얼 엔진은 빌드에 앞서 언리얼 에디터 고유의 툴을 이용한다.
이 툴을 UBT(언리얼 빌드 툴)와 UHT(언리얼 헤더 툴)이라고 한다.
이 둘과 이와 관련된 리플렉션 시스템, 가비지 컬렉터에 대해 정리해볼것.
UBT : 언리얼 빌더 툴
- 핵심 역할
- 가장 먼저 실행되는 빌드 도구
- 전체 프로젝트 구조 파악
- 플랫폼별 환경 설정.
- 주요 기능
- 플러그인 및 모듈 검색
- Target.cs파일 분석
- Build.cs파일 처리
- 플랫폼 호환성 확인
- 개발 환경 자동 구성
언리얼 빌드툴은 프로젝트 파일 내의 3개의 C#파일로 관리된다.
(프로젝트명).build.cs
(프로젝트명).target.cs
(프로젝트명Editor).target.cs
build.cs는 빌드 설정을 관리한다. 어떤 모듈을 빌드에 포함할지 등의 빌드 방법을 제어한다.
target.cs는 어떤 타겟 타입으로 빌드할지를 결정하고, 기타 프로퍼티에 대한 설정(이름부터 여러가지)을 추가/변경한다.
target.cs에 대한 자세한 설명은 공식문서에서 확인 가능하다.
솔루션 파일 빌드시에 가장 먼저 실행되어 설정에 따라 빌드할 수 있도록 해주는 도구.
UHT 언리얼 헤더 툴
- 주요 역할
- 빌드 전 C++코드의 헤더파일을 파싱하여 generated.h와 gen.cpp 소스코드를 생성( Intermediate폴더 아래)
- 생성된 gen.cpp파일을 기반으로 언리얼 에디터 리플렉션 시스템에 반영
리플렉션 시스템에 의해 등록된 오브젝트는 언리얼 에디터(디테일 패널, 블루프린트) 내에서 접근 및 수정이 가능해지고,
언리얼 가비지 컬랙터에 의해 메모리가 관리된다.
리플렉션 시스템 등록에 핵심이 되는 도구이며 매크로를 통해 등록이 된다.
매크로 선언 종류는
UCLASS, UPROPERTY, UFUNCTION, USTRUCT, GENERATED_BODY(기본생성)이며
등록할 객체 종류에 따라 객체 위에 매크로를 등록하는 식으로 사용된다.
가비지 컬렉션(GC)
가비지 컬렉터의 역활은 메모리 정리이며,
Mark and Sweep알고리즘을 통해 추적되지 않는 객체를 메모리에서 제거하도록 한다.
이때 추적하는 과정에서 리플렉션 시스템에 등록된 정보를 통해 객체를 추적하는데,
리플렉션에 등록되지 않은 객체를 "고립된 객체 : 사용하지 않는 객체"로 판단하고 제거할 수 있음에 주의해야한다
언리얼 가비지 컬랙터가 제거하는 객체는 언리얼 객체(UObject)에 해당하므로,
기본 데이터형식(int, float, bool)이나 C++ 구조체, 클래스 등은 등록하지 않아도 문제가 없지만
언리얼 객체라면 매크로로 등록하거나, 스마트 포인터를 이용해 직접 관리할 수 있어야 한다.
GC세팅은 프로젝트 세팅에서 변경 가능하다.

번외?
CDO (Class Default Object)
언리얼 헤더 툴은 언리얼 객체를 빌드할때 CDO를 하나 생성하여 메모리에 보관해둔다.
이를 UObject클래스마다 하나씩 존재하는 언리얼 에디터에서의 기본값으로 이해할 수 있다.
이 기본값은 모든 인스턴스의 "원본 템플릿 : 기본값 인스턴스" 역할을 한다.
언리얼 객체의 인스턴스를 생성하면 새로운 객체가 아닌 CDO가 복사되어
새로 생성하는것보다 빠른 속도로 생성할 수 있다.
CDO의 초기값은 클래스의 생성자에서 설정된 값이 이용되기때문에,
클래스 내부의 내부 변수 선언시 생성자에서 초기화를 해주도록 하는것이 권장된다.
추가로 CDO는 네크워트 전송시 델타 직렬화라는 작업을 하는데
이는 네트워크로 객체를 보낼때 CDO와의 차이점만을 보내도록 하게되어
더 효율적으로 데이터를 전송할 수 있게 한다.
'개발 > 언리얼' 카테고리의 다른 글
| SpawnActor, SetTimer활용해보기 (0) | 2026.04.13 |
|---|---|
| 언리얼 C++ 펜듈럼 움직임 구현하기 (0) | 2026.04.10 |
| 언리얼 c++로 움직이는 액터 구현하기 (0) | 2026.04.10 |
| 언리얼 리플렉션 매크로로 프로퍼티 설정하기(UPROPERTY, UFUNCTION) (0) | 2026.04.07 |
| 액터의 생명주기 간단하게 정리 (0) | 2026.04.07 |