C++에서 객체지향의 상속 개념을 사용하면 기존 클래스에서 속성과 동작을 상속받아 새로운 클래스를 만들 수 있습니다. 이를 통해 코드 재사용과 모듈성이 향상되는 등 효율적인 프로그래밍이 가능합니다. Unreal Engine에서 프로그래밍할 때는 일반적으로 UObject 클래스에서 파생된 객체를 사용합니다.
1. UObject의 Class
UClass* ObjectClass = RootComponent->GetClass();
UClass* ParentClass = RootComponent->GetClass()->GetSuperClass();
UClass* MeshComponentClass = UMeshComponent::StaticClass();
GetClass() 메서드는 UObject 클래스의 멤버 함수로, 객체의 클래스인 UClass 클래스를 가져오는 데 사용됩니다.
GetSuperClass() 메서드는 UClass 클래스의 멤버 함수로, 주어진 클래스의 상위 클래스를 가져오는 데 사용됩니다. 부모 클래스가 있으면 부모 클래스에 대한 포인터를 반환하고, 그렇지 않으면 NULL을 반환합니다.
StaticClass() 메서드는 특정 객체 클래스의 정적 멤버 함수로, 그 형식의 클래스 자체를 가져오는 데 사용됩니다.
2. IsA()
UClass* MeshComponentClass = UMeshComponent::StaticClass();
bool CheckIsType = TargetComponent->IsA(UMeshComponent::StaticClass());
IsA() 메서드는 UObject 클래스의 멤버 함수로, 객체가 특정 클래스 유형인지 확인하는 데 사용됩니다. 지정된 유형에 해당하는 클래스이면 true를 리턴하고, 그렇지 않으면 false을 반환합니다.
3. 인스턴스 캐스팅 템플리트
UMeshComponent* CastedObject = Cast<UMeshComponent>(RootComponent);
if (CastedObject == nullptr)
{
UE_LOG(LogTemp, Log, TEXT("Invalid casting"));
}
상속된 클래스의 계층에 속하는 클래스로 타입을 변환하는 함수 입니다. Cast<> 메서드는 UObject 클래스의 또 다른 멤버 함수로, 객체를 다른 클래스 유형으로 캐스팅하는 데 사용됩니다. 캐스트가 성공하면 캐스트된 객체에 대한 포인터를 하고 그렇지 않으면 NULL을 반환합니다. 이 방식으로 클래스 상속 여부를 확인할 수 있습니다.
RTTI (런타임 타입 식별)는 어떻게 사용될까?
Unreal Engine은 아래의 몇 가지 이유 때문에 C++ RTTI 대신 자체 캐스팅 함수를 사용합니다.
- 성능: Unreal Engine 캐스팅 함수는 성능을 최적화하고 Unreal Engine 객체와 특정 요구 사항에 맞게 설계되었습니다. dynamic_cast 함수는 일반적인 C++ 캐스팅을 위해 설계되어 있으며 Unreal Engine 객체의 특정 요구 사항에 최적화되어 있지 않습니다.
- 클래스 계층 구조: Unreal Engine은 크고 복잡한 클래스 계층 구조를 가지고 있으며, dynamic_cast는 복잡한 클래스 계층 구조에서 사용할 때 느릴 수 있습니다. Unreal Engine 캐스팅 함수는 Unreal Engine의 클래스 계층 구조의 고유한 요구 사항을 처리할 수 있도록 설계되었습니다.
- 디버깅: Unreal Engine 캐스팅 함수는 캐스트 실패 시 추가 디버깅 정보를 제공하여 코드 오류를 추적하고 수정하기 쉽게합니다.
- 일관성: Unreal Engine은 자체 캐스팅 함수를 사용함으로써 일관된 캐스팅 동작을 보장하여 개발자가 코드를 작성하고 유지 관리하기 쉬워집니다.
객체의 클래스 유형 상속을 확인하는 것은 Unreal Engine에서 객체 지향 프로그래밍을 할 때 매우 중요합니다.
C++에서 Unreal Engine을 사용하여 객체의 클래스 유형 상속을 확인하는 것은 IsA() 및 Cast<> 메서드를 사용하는 간단한 작업이지만, 객체의 클래스 유형 상속을 확인함으로써 코드가 예상대로 작동하도록 보장하고 객체 유형 불일치와 관련된 오류를 방지할 수 있습니다.
보다 자세한 내용은 아래의 링크에서 참조할 수 있습니다.
https://docs.unrealengine.com/5.1/en-US/API/Runtime/CoreUObject/UObject/UClass/
'Unreal Engine' 카테고리의 다른 글
Unreal Engine(C++)에서 Material을 로드하는 방법 (0) | 2023.03.15 |
---|---|
정다각형(N-gon)을 Procedural Mesh로 생성하는 방법 (Unreal Engine, C++) (0) | 2023.03.14 |
Unreal Engine(C++)에서 Actor와 Component 찾는 방법 (0) | 2023.03.12 |
glTFRuntime Plugin - glTF 3D 모델을 실행중에 로드하는 방법 (Unreal Engine, C++) (0) | 2023.03.11 |
현재 카메라의 위치와 회전값을 얻어내는 방법 (Unreal Engine, C++) (0) | 2023.03.11 |