리플렉션 처리 라인

C++ 선언은 UHT를 지나 에디터가 읽는 데이터가 된다

매크로는 문법 장식이 아니라 Header에서 생성 코드, 엔진 타입 정보, 에디터 노출까지 이어지는 계약의 시작점이다.

Header macro generated.h metadata table UCLASS / UPROPERTY / UFUNCTION UHT가 생성 에디터·블루프린트·GC가 읽음

Header에서 런타임 메타데이터까지

generated.h는 마지막 include
1. 헤더 표시

엔진이 알아야 할 선언에 표식을 붙인다

UCLASS()
class AItem : public AActor
{
  GENERATED_BODY()
};
2. UHT 분석

빌드 전에 헤더를 읽어 타입 정보를 추출한다

표준 C++ 컴파일러가 보기 전에 Unreal Header Tool이 매크로 주변의 메타데이터를 만든다.

3. 생성 코드

generated.h와 등록 함수가 붙는다

AItem.generated.h
StaticClass()
Property table
4. 엔진 등록

UClass, FProperty, UFunction으로 정리된다

타입, 속성, 함수 테이블이 런타임에서 조회 가능한 형태로 묶인다.

5. 도구 활용

에디터와 블루프린트가 같은 정보를 읽는다

Details, 저장/로드, Blueprint, GC가 하나의 리플렉션 데이터에 기대어 동작한다.

UCLASS

타입을 엔진 세계에 올린다

상속 구조, 생성 가능 여부, 블루프린트 파생 가능성 같은 클래스 단위 정보를 등록한다.

UCLASS(Blueprintable)
UPROPERTY

멤버를 관리 대상으로 만든다

편집 가능 범위, 저장 여부, GC 참조 추적, 블루프린트 접근을 한 자리에서 정한다.

UPROPERTY(EditAnywhere)
float Health;
UFUNCTION

함수를 호출 가능한 경계로 노출한다

BlueprintCallable, 이벤트, 네트워크 RPC 같은 호출 규칙이 메타데이터가 된다.

UFUNCTION(BlueprintCallable)
void TakeDamage();
Details

속성 편집

에디터 패널은 FProperty 정보를 읽어 카테고리와 입력 UI를 만든다.

Blueprint

그래프 노출

함수와 변수가 노드, 핀, 이벤트로 보이는 기준이 된다.

Serialize

저장과 로드

레벨과 에셋이 어떤 값을 기록해야 하는지 판단할 수 있다.

GC

참조 추적

UObject 포인터가 살아 있어야 하는지 수집 가능한지 추적한다.

include 순서

generated.h는 마지막

UHT가 만든 선언이 기존 타입 선언 뒤에 붙어야 한다.

클래스 몸체

GENERATED_BODY 위치 확인

엔진이 주입하는 기본 연결 코드가 클래스 내부에 들어가는 자리다.

노출 목적

필요한 기능만 붙인다

편집, 저장, 호출, 네트워크 중 실제로 필요한 경로만 열어 둔다.