언리얼엔진의 Cast
언리얼엔진의 Cast는 C++의 dynamic_cast와 비슷해 보이지만 리플렉션 시스템을 기반으로 하여 UObject 포인터가 다른 UObject 파생 클래스 타입인지 안전하게 확인하고 변환하는 기능으로서 각각 컴파일 시점과 런타임 시점 두 가지로 나누어 볼 수 있다.
1. 컴파일 시점(UHT)
UCLASS() 매크로를 추가한 상태라면 UHT(Unreal Header Tool)라는 프로그램이 컴파일 전에 전체 코드를 스캔한다. 그 다음 UCLASS()가 붙은 모든 클래스의 정보를 분석하여 클래스 간의 상속 계층도에 대한 메타데이터를 생성하여 UHT에 저장한다 이 메타데이터는 엔진 내부에 저장되어 객체의 타입을 식별하는 데 사용된다. 얼핏 보면 RTTI와 동작 방식이 비슷한 것을 알 수 있는데 그렇기에 언리얼은 성능과 이식성 문제로 C++의 표준 RTTI를 기본적으로 비활성화한다.
2. 런타임 시점(Cast 호출)
Cast<TargetType>(SourceObject)를 작성하여 호출하면 처음에 SourceObject가 nullptr인지 확인을 한다 nullptr이라면 즉시 nullptr을 반환하게 되며 nullptr이 아니라면 SourceObject가 TargetType인지 아닌지 UHT를 통해서 TargetType의 자식클래스인지 메타데이터를 확인한다. TargetType의 자식클래스 거나 TargetType이라면 TargetType 포인터로 변환하여 반환하고 실패 즉 TargetType과 관련 없는 클래스라 한다면 nullptr을 반환한다.
이렇게 실패시 nullptr을 반환한다는 점 때문에 if문 등을 사용하여 반환받은 값이 nullptr인지 확인하는 과정만 추가한다면 크래시를 예방할 수 있다는 장점이 있다.
'unreal 5기' 카테고리의 다른 글
| 251023 언리얼엔진 본캠프 51일차 레플리케이션(Replication) (0) | 2025.10.23 |
|---|---|
| 251022 언리얼엔진 본캠프 50일차 리플렉션(Reflection) 시스템 (0) | 2025.10.22 |
| 251020 언리얼엔진 본캠프 48일차 CDO와 UObject (0) | 2025.10.20 |
| 251016 언리얼엔진 본캠프 46일차 UPROPERTY와 UFUNCTION (0) | 2025.10.16 |
| 251015 언리얼엔진 본캠프 45일차 UCLASS와 USTRUCT (0) | 2025.10.15 |