언리얼 C++ 프로그래밍

[언리얼 C++] TSubclassOf 템플릿 클래스

언린이 2021. 7. 16. 22:55

TSubclassOf는 UClass 타입의 안전성을 보장해주는 템플릿 클래스입니다.

예를 들어 디자이너가 파티클 타입을 지정하도록 해주는 클래스를 제작 중이라 가정합시다.

 

UPROPERTY(EditDefaultsOnly, Category=Particle)
UClass* ParticleType;

위 예제 코드처럼 그냥 UPROPERTY 타입의 UClass를 만든 다음 디자이너에게 UParticleSystemComponent의 파생 클래스만 할당하라고 가이드할 수 있습니다. 하지만 이렇게 하면 실수로 다른 클래스를 할당하는 것을 막을 수 없습니다.

이러한 상황에서, TSubclassOf 템플릿을 사용하여 클래스 할당의 선택지를 제한시킬 수 있습니다.

 

UPROPERTY(EditDefaultsOnly, Category=Particle)
TSubclassOf<UParticleSystemComponent> ParticleType;

위 예제 코드처럼 TSubclassOf 템플릿을 사용하여 선언하면, 에디터의 프로퍼티 창에서 UParticleSystemComponent의 파생 클래스만 선택되도록 제한을 줄 수 있습니다.

이러한 UPROPERTY 안전성에 추가로, C++ 수준에서의 타입 안전성도 확보할 수 있습니다.

 

UClass* ClassA = UParticleSystemComponent::StaticClass();

TSubclassOf<UParticleSystemComponent> ClassB;

ClassB = ClassA; // Performs a runtime check

TSubclassOf<UParticleSystemComponent_Splash> ClassC;

ClassB = ClassC; // Performs a compile time check

그리고 비호환 TSubclassOf 타입을 서로에게 할당하려는 순간, 컴파일 오류가 발생하게 됩니다. 범용 UClass를 할당하려는 경우, 할당이 가능한지 검증하는 런타임 검사를 합니다. 만약 런타임 검사가 실패하게 된다면, 결과값은 nullptr입니다.