본문 바로가기
프로그래밍 언어/C++

[C++] enum class와 enum

by 까망 하르방 2025. 6. 29.
반응형

enum

enum은 순차적으로 나열된 정수형 상수를 만들 때 사용

사용할 때는 enum 키워드 없이 이름을 가져와 사용하면 된다.

enum SU {
    ONE = 1,
    TWO,
    THREE,
    FIVE = 5,
    SIX,
};

SU num = ONE;



enum 변수 크기는 int형 크기이지만
int 형과는 엄연히 다른 자료형이다.

#include <iostream>

using namespace std;

enum week { SUN, MON, TUE, WED, THU, FRI, SAT };

int main(void)
{
    week w;
    w = 5; //  error 
    w = MON;
    int n = SUN; // error 자체는 없지만 권장하지 않음
}

 


📌 [C] 열거형 타입 enum 이란?

 

[C/C++] 열거형 타입 enum 이란?

enum 타입이란?#include enum Day { Sunday, Monday = 10, Tuesday, Wednesday, Thursday = 20, Friday, Saturday};int main(){ printf("Sunday : %d \n", Sunday); printf("Monday : %d \n", Monday); printf("Tuesday : %d \n", Tuesday); printf("Thursday : %d \n", T

zoosso.tistory.com

 

📌 [C] typedef enum 활용

 

[C] typedef enum 활용

[C] 열거형 타입 enum 이란?을 먼저 읽고 오시는 것을 권장 드립니다. enum 타입은 typedef 키워드와 주로 함께 사용된다. typedef는 타입의 별칭을 생성하고 실제 타입 이름 대신 별칭을 사용할 수 있게

zoosso.tistory.com


enum class

• C++11 부터는 enum class가 새롭게 도입

• 같은 이름의 열거형 요소가 다른 열거형과 충돌하지 않도록 한다.

• enum 변수에 int 형 정수가 대입이 불가능하며 enum형 상수만 대입 가능

#include <iostream>

enum class week { SUN, MON, TUE, WED, THU, FRI, SAT }; //  


int main(void)
{
    week w;
    
    w = 3; //  error
    int n = SUN; // error
    w = MON; // error
    
    w = week::MON;  // ok
    int n = static_cast<int>(week::SUN); // ok
}

 

 

소속을 명시하거나 static_cast 사용으로 코드가 길어졌지만

enum 사용하는 관점에서는 더 안정적!

#include <iostream>

enum class week { SUN, MON, TUE, WED, THU, FRI, SAT }; //  


int main(void)
{
    week w;
    
    w = 3; //  error
    int n = SUN; // error
    w = MON; // error
    
    w = week::MON;  // ok
    int n = static_cast<int>(week::SUN); // ok
}

 

 

C에서 enum 타입이 있지만 비교 시, 정수 형태로 비교해야 하는 문제가 있다.

다른 enum 끼리 타입을 비교하거나 정수 형태로 초기화하는 것을 방지 해준다.

• enum에 할당할 바이트 양을 정할 수 도 있다.

• for 문과 같이 반복자 활용시 static_cast 처리로 복잡해 보일 수 있다.

enum class eScoreType : uint8_t
{
    A,
    B,
    C,
    count,
};

for (int i = static_cast<int>(eScoreType::A);
     i < static_cast<int>(eScoreType::count);
     ++i)
{
    // code
}
반응형

'프로그래밍 언어 > C++' 카테고리의 다른 글

[C++] 임시(temporary) 객체  (22) 2025.04.26
[C++] 소멸자 함수  (9) 2025.04.25
[C/C++] 메모리 영역(스택, 힙, 데이터 영역)  (6) 2025.04.20
[C/C++] 비트 필드 구조체  (8) 2025.03.23
[C++] noexcept  (3) 2025.03.20

댓글