• 언리얼만의 C++은 컴포지션을 구현하는 독특한 패턴이 있다.

    //UPROPERTY()
    	//class UCard* Card; // 컴포지션에서는 전방선언을 통해 헤더파일 포함하지않고 의존성을 없앨수 있음. 어짜피 컴포지션 변수는 포인터니까 이 방식은 언리얼4에서는 정석이었지만 5부터는 다른방식으로 하라고 에픽에서 제시함.
    	
    	UPROPERTY()
    	TObjectPtr<class UCard> Card; // 위 방식대신 언리얼5에서 변경된 부분
    
  • 클래스 기본 객체를 생성하는 생성자 코드를 사용해 복잡한 언리얼 오브젝트를 생성 할 수 있음.

  • 언리얼 C++ 컴포지션 Has-A 관계 용어

    • 나를 소유한 상위 오브젝트 → Outer
    • 내가 소유한 하위 오브젝트 → Subobject
  • 언리얼 C++이 제공하는 확장 열거형을 사용해 다양한 메타 정보를 넣고 활용할 수 있다 .

    UENUM()
    enum class ECardType : uint8
    {
    	Student = 1 UMETA(DisplayName = "For Student"),
    	Teacher UMETA(DisplayName = "For Teacher"),
    	Staff UMETA(DisplayName = "For  Staff"),
    	Invalid
    };
    
    const UEnum* CardEnumType =  FindObject<UEnum>(nullptr, TEXT("/Script/UnrealComposition.ECardType")); // 메타데이터를 직접조회하여 열거형에 적용된 메타 데이터를 표시할수도 있음.
    if (CardEnumType)
    {
    	FString CardMetaData =  CardEnumType->GetDisplayNameTextByValue((int64)CardType).ToString();
    	UE_LOG(LogTemp, Log, TEXT("%s님이 소유한 카드 종류 : %s"), *Person->GetName(), *CardMetaData);
    }
    

    <aside> 💡 언리얼 C++의 컴포지션 기법은 게임내에 복잡한 객체를 설계하고 생성할 때 유용하게 사용된다.

    </aside>