언리얼 열거형, 컴포지션

2023. 5. 24. 15:20·[게임 개발] 언리얼엔진 공부/이득우의 언리얼 프로그래밍 Part.1

섹션 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을 사용하고, 기본적으로 포인터를 사용하기에 *연산자를 뺀다.


구현 코드

  1. FindObject<UEnum>(nullptr, TEXT("/Script/UnrealComposition.ECardType"))
    를 사용하여 ECardType 열거형의 메타데이터를 가져와서 CardEnumType에 넣음

  2. 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
'[게임 개발] 언리얼엔진 공부/이득우의 언리얼 프로그래밍 Part.1' 카테고리의 다른 글
  • 델리게이트
  • 언리얼 인터페이스
  • 언리얼 오브젝트 리플렉션
  • TChar와 FString
람팜팜~
람팜팜~
:)
  • 람팜팜~
    RumPumPum
    람팜팜~
  • 전체
    오늘
    어제
    • 전체 (123)
      • 🎵 일상 (2)
      • JAVA (5)
        • 김영한의 자바 입문 (3)
      • JavaScript (12)
      • ---------------------------.. (0)
      • [게임 개발] 포트폴리오 (2)
        • RPG (1)
        • 슈터-플랫포머 (1)
      • [게임 개발] 개발 일지 (28)
        • RPG (25)
        • TopDownProject (3)
      • [게임 개발] 언리얼엔진 공부 (9)
        • 이득우의 언리얼 프로그래밍 Part.1 (6)
        • 이득우의 언리얼 프로그래밍 Part.2 (1)
        • 개인 메모 (2)
      • [게임 개발] 알고리즘 공부 (60)
        • 프로그래머스 (8)
        • 백준 (52)
        • 개인 메모 (0)
      • [게임 개발] CPP 공부 (2)
        • 이것이 C++ 이다 (1)
        • Effective C++ (0)
        • Effective Modern C++ (0)
        • 홍정모 그래픽스 새싹코스 (1)
      • [게임 개발] CS 공부 (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      해시
      참조자
      그리디
      데드락
      context switching
      투포인터
      슬라이딩 윈도우
      스레드
      dfs
      문자열
      dp
      브루트포스
      메모리구조
      우선순위 큐
      누적합
      역참조
      프로세스
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    람팜팜~
    언리얼 열거형, 컴포지션
    상단으로

    티스토리툴바