enum VS enum class

Soooo·2024년 6월 6일

C++

목록 보기
6/7

C++ 11에서 등장한 enum class와 기존 enum의 차이점을 알아보자

기존 enum

서로 다른 enum 타입끼리도 비교가 가능하다는 불편함이 있었음
예를 들어,

enum COLOR {
	RED,		// 0
    GREEN,		// 1
    BLUE,		// 2
    E1			// 3
};

enum ANIMAL {
	CAT,		// 0
    DOG,		// 1
    TIGER		// 2
    E2			// 3 (다른 enum 멤버의 이름과 중복될 수 없음
};

void main() {
	COLOR c = RED;
    ANIMAL a = DOG;
    int n = c;	// n에 0이 들어감
    /*
    enum COLOR 타입과 enum ANIMAL 타입을 비교하는 코드를 넣어도
    정상적으로 작동함
    */   
}

위 코드에는
1. 서로 다른 enum 간 멤버 이름이 중복될 수 없다
2. 서로 다른 enum 타입 간 비교가 가능하다
3. 기본적으로 int타입이다.
라는 문제점이 있다.
(코딩할 때 컬러와 동물을 비교하겠다는 로직은 일반적으로 짜지 않으니...)

이를 보완하기 위해 나온 것이 C++11에서 등장한 enum class

enum class는?

enum class COLOR {
	RED,
    GREEN,
    BLUE,
    E
};

enum class ANIMAL {
	CAT,
    DOG,
    TIGER,
    E
};

void main() {
	COLOR c = COLOR::RED;
    ANIMAL a = ANIMAL::CAT;
    // int a = DOG 선언 시 ERROR
    /*
    c와 a를 비교하는 코드 실행 시
    에러남
    */
}

또한 int 외에 정수형 타입을 정해줄 수 있다

enum class ANIMAL : int8_t {};
enum class COLOR : int16_t {};

결론 : enum class를 애용하도록 하자 (사실 난 한 개의 enum만 쓸 땐 걍 enum 쓰긴 함)




[참고자료]
https://woo-dev.tistory.com/54

0개의 댓글