Enum Class란? (사용자정의 열거형)

열거형은 정수형 상수를 사람이 알아보기 쉬운 형태로 만들어줍니다. 이러한 열거형은 코드 내부에서만 사용이 가능하고, 언리얼 에디터의 디테일 패널이나, 블루프린트에서 사용이 불가능하다는 문제가 있습니다. 이 문제는 언리얼 전용 열거형을 만들어주시면 해결할 수 있습니다.

 

UEnum 레퍼런스 코드

UENUM(BlueprintType) 
enum class EViewMode : uint8 
{ 
    ThirdPerson    UMETA(DisplayName = "ThirdPerson"), 
    FirstPerson    UMETA(DisplayName = "FirstPerson") 
};

 

위 열거형은 ViewMode를 의미하는 예제 열거형이며 3인칭과 1인칭 타입이 존재합니다.

DisplayName은 언리얼 에디터상에서 표기될 이름입니다.  언리얼 엔진 코딩 표준상 열거형의 경우

약자인 E를 붙여주는걸 권장합니다.

 

컴파일 성공시 전역 변수로 선언했을때 아래와 같이 직관적인 콤보 박스 형태로 활용될 수 있으며,

Switch문을 사용했을때도 직관적인 UI를 제공합니다.

 

[그림 1. 언리얼 열거형 전역 변수 선언시 ]

 

[그림 2. 에디터에서 선언한 열거형을 Switch문 사용시 ]

 

C++ FORCEINLINE을 활용한 Enum 클래스 디버깅

위 처럼 언리얼용 열거형으로 선언 시 언리얼 에디터 상에서는 매우 직관적인 UI를 제공하나, 단점이 하나있습니다.

기본적으로 열거형은 정수형 상수로 이루어져있기때문에 로그를 출력할때 String형으로 캐스팅해야하는 번거로움이 있습니다. 이번 게시글에선 FORCEINLINE을 활용해 쉽게 반복처리 할 수 있는 팁을 알려드리고자합니다.

기본적인 FORCEINLINE에 대한 개념은 hwan1402.tistory.com/71 게시글을 참고해주시길 바랍니다.

 

template <typename Enumeration> 
static FORCEINLINE FString GetEnumerationToString(const Enumeration InValue) 
{ 
   return StaticEnum<Enumeration>()->GetNameStringByValue(static_cast<int64>(InValue)); 
}

 

해당 코드를 enum class를 선언한 클래스에 선언합니다.

 

UE_LOG(LogClass, Warning, TEXT("View Mode : %s"), *GetEnumerationToString(ViewMode))

 

이러한 방식으로 C++에서 FORCEINLINE을 활용해 반복 작업을 줄이면서 열거형을 쉽게 디버깅할 수 있습니다.

팁을 하나 더 드리자면 열거형은 왠만하면 라이브러리 형태로 어느 클래스에서든 호출이 가능하게끔 한 번에 모아서

관리하시는걸 권장드립니다. 물론 상황에 따라 한 클래스에서만 사용 될 열거형이라면 예외입니다.

 

복사했습니다!