리플렉션이란?.
리플렉션(Reflection)은 프로그램이 런타임(실행 중)에 자기 자신을 조사하고 수정할 수 있는 기능이다.
쉽게 말해, 코드가 자기 자신의 구조(클래스, 변수, 함수 등)를 런타임에 확인하고 조작할 수 있도록 하는 시스템.
(리플렉션은 그래픽 용어이기도 하기때문에 혼동 조심!)
C++은 리플렉션 기능이 지원하지 않는다(C#은 지원 해준다.)
그래서 언리얼은 리플렉션 시스템을 만들었다.Unreal Header Tool(UHT)가 그 프로젝트를 컴파일 할 때 해당 정보를 수집합니다.
언리얼 리플렉션에 대한 이해
문서 : https://www.unrealengine.com/ko/blog/unreal-property-system-reflection
Unreal Header Tool (UHT)란
Unreal Header Tool(UHT)은 언리얼 엔진의 리플렉션 시스템을 처리하는 도구로, UCLASS, USTRUCT, UPROPERTY, UFUNCTION 등의 매크로를 분석하고 필요한 코드 및 메타데이터를 자동으로 생성하는 역할을 합니다.
Unreal Header Tool (UHT)동작 과정 : UHT는 빌드 과정에서 실행되며, UnrealBuildTool(UBT)이 UHT를 호출하여 헤더 파일을 분석하고 필요한 파일을 생성합니다.
- C++ 소스 파일에서 UCLASS, USTRUCT, UPROPERTY, UFUNCTION을 찾음
- 이 정보들을 기반으로 자동으로 *.generated.h 파일 생성( 중요! *.generated.h는 항상 제일 Include 마지막 구간에 선언해줘야 한다.!!)
- 엔진이 런타임에서 리플렉션 시스템을 활용하여 객체를 관리할 수 있도록 지원
UHT가 처리하는 주요 매크로
UCLASS() :매크로는 언리얼 엔진의 리플렉션 시스템에서 객체를 관리할 수 있도록 함
GENERATED_BODY() : UHT가 자동 생성한 코드와 연결
(GENERATED_USTRUCT_BODY() / GENERATED_UCLASS_BODY() 가있었는데 5들어오면서 GENERATED_BODY() 통합 되었다.)
UPROPERTY : 가비지 컬렉션 & 직렬화 지원( UPROPERTY를 사용하면 에디터에서 수정 가능, 가비지 컬렉션(GC)에서 자동 관리됨)
UFUNCTION - 블루프린트 및 네트워크 지원( UFUNCTION을 사용하면 블루프린트에서 호출 가능)
USTRUCT - 언리얼 구조체( USTRUCT는 언리얼의 데이터 구조체를 정의하는 매크로)


프로퍼티 시스템에 대한 유형 계층구조
UField (모든 리플렉션 대상의 기반 클래스)
├── UStruct (클래스 및 구조체를 위한 기본 클래스)
│ ├── UClass (C++ 클래스 / UCLASS() 기반)
│ ├── UScriptStruct (C++ 구조체 / USTRUCT() 기반)
│ ├── UFunction (C++ 함수 / UFUNCTION() 기반)
│
├── UEnum (C++ 열거형 / UENUM() 기반)
│
├── UProperty (C++ 멤버 변수 / UPROPERTY() 기반)
├── FIntProperty (int32)
├── FFloatProperty (float)
├── FBoolProperty (bool)
├── FObjectProperty (UObject* 참조)
├── FStructProperty (UStruct 기반 구조체)
├── FArrayProperty (TArray<>)
├── FMapProperty (TMap<>)
UField → 모든 리플렉션 대상의 최상위 클래스
UStruct → UClass(클래스), UScriptStruct(구조체), UFunction(함수)의 부모 클래스
UEnum → UENUM()으로 선언된 열거형 관리
UProperty → UPROPERTY()로 선언된 멤버 변수 관리
'언리얼 엔진 공부 > 언리얼C++' 카테고리의 다른 글
| 직렬화 (2) | 2025.04.08 |
|---|---|
| 언리얼C++델리게이트(Delegate) (0) | 2025.04.03 |
| 컴포지션 (0) | 2025.04.03 |
| 인터페이스 (1) | 2025.04.02 |
| 언리얼C++ 기본 타입과 문자열(Unreal C++ Primitive Types And String) (0) | 2025.03.31 |