섹션 2.언리얼 C++ 설계 II - 컴포지션中
열거형
열거형이란?
- 열거형은 정수형 상수 집합을 정의하기 위해 사용되는 데이터 형식.
- 프로그래밍에서 특정한 값의 집합을 나타내는 데 유용.
- 열거형은 주로 상수 값으로 사용되는 식별자들을 정의하고, 해당 값들을 사용할 때 편의성과 가독성을 높여줌.
UENUM()
enum class ECardType : uint8
{
Student = 1 UMETA(DisplayName = "For Student"),
Teacher UMETA(DisplayName = "For Teacher"),
Staff UMETA(DisplayName = "For Staff"),
Invalid
};
위 코드에서 ECardType은 열거형의 이름이며
Student, Teacher, Staff, Invalid는 해당 열거형의 멤버로 정의된 상수이다.
이 멤버들은 정수 값으로 내부적으로 표현되며, Student를 1로 정의했기 때문에
다음 값들은 순서대로 2, 3, 4로 할당된다.
위와 같이 열거형을 사용하면 단순히 숫자 1,2,3,4로 쓰는 것 보다 의미있는 이름으로
자료들을 사용할 수 있다.
UENUM()으로 열거형을 리플렉션 시스템에 등록하고,
UMEA()를 이용해 열거형에 메타 데이터를 추가한다.
메타 데이터는 열거형의 추가 정보를 제공한다.
컴포지션
객체지향에서의 컴포지션
- 상속 -> 성질이 같은 부모클래스와 자식클래스 (IS - A 관계)
- 컴포지션 -> 성질이 다른 두 객체에서 어떤 객체가 다른 객체를 소유 (HAS - A 관계)
컴포지션의 HAS - A 관계에 사용되는 코드
- 내가 소유한 하위 오브젝트 : Subobject
- 내가 소유한 상위 오브젝트 : Outer
Card = CreateDefaultSubobject<UCard>(TEXT("NAME_Card"));
CreateDefaultSubobject은 UObject의 파생 클래스에서 하위 오브젝트를 생성하는 데 사용.
위 코드는 UCard 클래스의 인스턴스를 생성하고, NAME_Card 라는 이름을
생성된 인스턴트의 식별자로 사용.
해당 인스턴스를 Card에 할당하여 기본 하위 객체로 사용함.
class UCard* Card;
위 코드는 class임을 나타내는 전방선언을 하여 컴파일러에게 클래스의 존재를 알려주는데,
이는 컴포지션 관계에 있을때 의존성 감소를 위해 선언에서 전방선언을
해야하기 때문이다.
- 의존성 감소 :전방선언을 이용해 객체들간의 직접적인 참조를 피하고 인터페이스나 추상 클래스로 참조한다.
이렇게 객체들의 의존성을 간접적으로 만들면, 객체들은 서로 독립적으로 수정이 가능해진다.
TObjectPtr<class UCard> Card;
하지만 언리얼엔진5 부터 위 코드로 정석이 바뀌었다.
TObjectPtr을 사용하고, 기본적으로 포인터를 사용하기에 *연산자를 뺀다.
구현 코드
- FindObject<UEnum>(nullptr, TEXT("/Script/UnrealComposition.ECardType"))
를 사용하여 ECardType 열거형의 메타데이터를 가져와서 CardEnumType에 넣음 - CardEnumType이 유효한 경우 GetDisplayNameTextByValue() 함수를 사용하여 CardType에 해당하는 메타데이터 값(DisplayName) 을 가져와서 문자열로 변환함.
'[게임 개발] 언리얼엔진 공부 > 이득우의 언리얼 프로그래밍 Part.1' 카테고리의 다른 글
델리게이트 (0) | 2023.09.03 |
---|---|
언리얼 인터페이스 (0) | 2023.05.23 |
언리얼 오브젝트 리플렉션 (0) | 2023.05.19 |
TChar와 FString (0) | 2023.05.17 |
언리얼의 기본 타입을 따로 지정하는 이유 (0) | 2023.05.17 |