[C++] Enum Class(Scoped Enum)

👻 Enum Class

일반 열거형인 enum에 클래스가 붙은 열거형이다. 일반 열거형은 Unscoped Enum, 범위가 없는 열거형이며 지정한 이름을 다른 열거형에서 중복으로 사용할 수 없다. enum class는 이름의 공간이 한정적이어서 중복 사용이 가능하다.

enum PlayerType {
    // None,    // 중복 사용 불가
    PT_Knight,
    PT_Archer, 
    PT_Mage
};

enum MonsterType {
    // None,    // 중복 사용 불가
};

// enum class
enum class ObjectType : int {
    Player,
    Monster,
    Projectile
};

// 이름 중복 사용 가능
enum class ObjectType2 {
    Player,
    Monster,
    Projectile
};

대신에 사용할 때 클래스 명을 반드시 붙여줘야한다.

ObjectType::Player;

또한 enum class암묵적인 변환이 금지된다. 일반 열거형은 타입을 따로 지정해주지 않으면 자동으로 int 타입으로 세팅되지만 enum class는 사용할 때 타입 변환을 반드시 해줘야한다. 경우에 따라 장점이 될 수도 있지만 단점이 될 수도 있다.

double value = PT_Knight; // 가능
double value2 = ObjectType::Player; // 불가능
double value2 = static_cast<double>(ObjectType::Player);

이러한 점은 코드가 길어진다는 단점을 가진다.

if (choice == static_cast<int>(ObjectType2::Monster)) {
    cout << "yyy" << endl;
}

unsigned int bitFlag;
bitFlag = (1 << static_cast<int>(ObjectType::Player));

👻 글을 마치며

이번 시간에는 enum class에 대해 알아보았다. 열거형은 하나밖에 없는 줄 알았는데 클래스가 합쳐진 버전도 있다는 걸 알고 놀랐다. 안 그래도 외울 거 많은데 뭐가 계속 늘어나.. 잘 사용하면 좋은 것 같은데 일반 열거형보다 크~게 좋다는 느낌은 받지 못했다. 코드 길어지는 게 제일 싫기 때문에..😅


소스코드 보러가기


출처
인프런 Rookies님 강의

Categories:

Updated:

Leave a comment