Code Less, Create More!

Simple but useful code snippets for 3D Graphic Developers

Unreal Engine

Unreal Engine(C++)에서 객체의 클래스 상속 관계 확인 방법

데브엑스 2023. 3. 12. 06:20
반응형

C++에서 객체지향의 상속 개념을 사용하면 기존 클래스에서 속성과 동작을 상속받아 새로운 클래스를 만들 수 있습니다. 이를 통해 코드 재사용과 모듈성이 향상되는 등 효율적인 프로그래밍이 가능합니다. Unreal Engine에서 프로그래밍할 때는 일반적으로 UObject 클래스에서 파생된 객체를 사용합니다.

Unreal Engine's class hierarchy

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/

 

UClass

An object class.

docs.unrealengine.com

 

반응형