enum(열거형)
정수 상수 집합으로 구성된 사용자 정의 형식

enum 타입의 변수 Number을 새로 정의함
ZERO 부터 상수 값 0 이 되고, 특별히 값을 지정하지 않으면 순차적으로
1씩 증가되어 할당
ZERO = 0, ONE = 1, ... FIVE = 5가 할당됨

TWO에 5을 지정 해서 THREE부터 5의 1식 증가되어 할당됨
위의 경우 THREE = 6, FOUR = 7, FIVE = 8이 할당됨
enum을 쓰는 이유는?
👉 허용 가능한 값을 제한 할 수 있다.
👉 코드가 단순해지고 가독성이 좋아진다.
👉 사용자의 실수를 미리 예방할 수 있다.
구현 예시
👀 switch를 사용한 enum 처리
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
enum Number
{
ZERO,
ONE,
TWO,
THREE,
FOUR,
FIVE
};
void main()
{
unsigned int number;
number = TWO;
switch (number)
{
case ZERO:
{
std::cout << "숫자 0" << std::endl;
break;
}
case ONE:
{
std::cout << "숫자 1" << std::endl;
break;
}
case TWO:
{
std::cout << "숫자 2" << std::endl;
break;
}
case THREE:
{
std::cout << "숫자 3" << std::endl;
break;
}
case FOUR:
{
std::cout << "숫자 4" << std::endl;
break;
}
case FIVE:
{
std::cout << "숫자 5" << std::endl;
break;
}
}
}
|
cs |
실행 결과

enum class
서로 다른 enum의 맴버의 이름이 중복되면 안되는 문제,
컴파일러가 묵시적으로 정수타입으로 변환하는 문제를 보완하기 위해서
enum class가 등장함
enum class 특징
1. enum class의 맴버 이름을 중복으로 사용해도 됨
1
2
3
4
5
6
7
8
9
|
enum class Color
{
RED, GREEN, BLUE
};
enum class Signal
{
RED, GREEN, BLUE
};
|
cs |
Color의 맴버이름과 Signal의 맴버이름이 같아도 됨
그러나 코드를 명확하게 작성해서 사용해야함
ex) Color::RED, Signal::RED
2. 암시적 형변환이 이루어지지 않는다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#include <iostream>
using namespqce std;
enum class ESubject
{
MATH,//MATH = 0
KOREAN,
ENGLISG,
};
int main(void)
{
//static_cast<바꾸려는 타입>(대상) : 논리적으로 변환 가능한 타입을 변환한다
if(static_cast<int>(ESubject::KOREAN) == 1)
{
cout<<"KOREAN is 1" << endl;
}
else
{
cout<<"KOREAN is not 1" << endl;
}
return 0;
}
|
cs |
enum은 따로 형변환을 하지않아도 암시적으로 정수형을 상수로 변환이 되었지만,
enum class는 cast 연산자를 통해 명시적으로 형변환을 해야함
static_cast<int>(ESubject::KOREAN) : 정수를 int로 명시적으로 형변환을 하고있음