[Unreal Engine] Reflection System - Summary

Imeamangryang·2025년 6월 27일

Unreal Reflection System

목록 보기
10/10
post-thumbnail

출처 : staticJPL - Unreal-Engine-Core-Documentation


Summary

엔진 소스 코드를 꼼꼼히 살펴보았다면, 제공된 UML 다이어그램이 타입 시스템의 구조를 이해하는 데 도움이 될 것입니다.


Recap

요약하자면, 언리얼 엔진의 리플렉션 시스템은 "생성(Generation)", "수집(Collection)", "등록(Registration)"의 세 단계로 나눌 수 있습니다. 코드 생성 단계에서는 Unreal Build Tool이 미리 정의된 매크로를 파싱하여 네이티브 타입을 리플렉션할 수 있도록 합니다. 이 과정에서 타입이 토큰화되고, 타입 정보와 런타임 생성 함수 포인터, UObject 메모리 할당 연산자 등이 정의된 .gen 파일(cpp 및 헤더)이 생성됩니다.

수집 단계에서는 엔진 모듈의 동적 라이브러리 링크를 통해 타입 정보가 전역 지연 싱글톤 레지스트리에 정적으로 모입니다. 모듈식 설계 덕분에 각 모듈이 자체적으로 리플렉션 정보를 포함하고, 순차적으로 링크 및 처리될 수 있습니다.

에디터 모드에서는 엔진 시작과 함께 Core 모듈이 가장 먼저 로드되며, 이 과정에서 UClass, UStruct, UEnum, UInterface 등 핵심 타입이 준비되어 이후 로드되는 타입을 처리할 수 있게 됩니다. 등록 단계가 끝나면 Bind linking을 통해 구조가 정리 및 최적화되어 성능과 편의성이 향상됩니다.

"UClass는 UObject이고, UObject는 UClass다"

이해해야 할 핵심 개념은 UClass*가 다양한 요소를 연결하는 주요 교차점 역할을 하며, UObject는 언리얼 엔진 내 모든 동작의 저수준 표현이라는 점입니다. 이 관계에 대한 깊은 이해는 가비지 컬렉션(Garbage Collection) 과정의 근간과 UObjects의 올바른 할당 및 소멸로 이어집니다. 이러한 이해는 직렬화, 액터 및 컴포넌트 아키텍처, 게임플레이 시스템, 네트워킹 등 다양한 영역에 영향을 미칩니다. UClass의 생명주기를 강조하면 다음과 같습니다:

  1. 메모리 구조 정의: 메모리 영역을 할당하고 UClass 생성자를 호출합니다.
  2. 등록: 이름을 부여하고 Deferred Registry를 통해 오브젝트 시스템에 통합합니다.
  3. 오브젝트 생성: .gen 파일에 정의된 속성, 함수, 인터페이스, 메타데이터 등으로 오브젝트를 채웁니다.
  4. 바인딩: 속성의 주소를 정의하고 정렬하여 전체 구조를 성능과 편의성, 접근성을 위해 최적화합니다.
  5. 토큰 스트림 구성: UClass가 다른 오브젝트를 어떻게 참조하는지 지정합니다. 참조 트리를 구성하여 가비지 컬렉션의 핵심이 되며, 해당 오브젝트가 참조하는 다른 오브젝트의 분석에도 활용됩니다.
profile
언리얼 엔진 주니어 개발자 입니다.

0개의 댓글