enum은 열거형 데이터 타입으로, 상수 값에 의미 있는 이름을 부여하기 위해 사용된다. 쉽게 말해, 숫자를 이름으로 관리하는 방법이다.
enum Day {
SUNDAY, // 0
MONDAY, // 1
TUESDAY, // 2
WEDNESDAY, // 3
THURSDAY, // 4
FRIDAY, // 5
SATURDAY // 6
};
int main() {
Day today = MONDAY;
if (today == MONDAY) {
std::cout << "오늘은 월요일입니다.\n";
}
return 0;
}
출력:
오늘은 월요일입니다.
SUNDAY는 기본값이 0, 그 다음 값은 1씩 증가값을 수동으로 설정할 수도 있다.
enum ErrorCode {
SUCCESS = 0,
WARNING = 1,
ERROR = 100,
FATAL = 200
};
SUCCESS는 0, WARNING은 1, ERROR는 100, FATAL은 200이다.enum class는 C++11부터 추가되어서 더 안전하고 명시적으로 enum 기능을 사용할 수 있다.enum class로 선언된 값은 반드시 이름으로 접근해야 한다.enum은 정수로 암묵적으로 변환될 수 있지만, enum class는 그렇지 않다.enum class Color {
RED,
GREEN,
BLUE
};
int main() {
Color color = Color::RED;
if (color == Color::RED) {
std::cout << "빨간색입니다.\n";
}
// 아래 코드는 오류 발생 (명시적 변환 필요)
// int value = color;
return 0;
}
출력:
빨간색입니다.
enum과 enum class의 차이점| 특징 | enum | enum class |
|---|---|---|
| 스코프 | 전역 스코프 | 제한된 스코프 |
| 타입 안전성 | 정수로 암묵적 변환 가능 | 암묵적 변환 불가능 |
| 구문 | VALUE로 접근 | EnumName::VALUE로 접근 |
| 선언 방식 | enum Name { ... }; | enum class Name { ... }; |
상태 관리: 프로그램 상태를 관리하기 위해 사용
enum State {
START,
RUNNING,
STOPPED
};
에러 코드 정의: 에러 상황을 구분하기 위해 사용
enum Error {
OK,
FILE_NOT_FOUND,
OUT_OF_MEMORY
};
옵션 정의: 옵션을 구분하거나 플래그로 사용
enum Option {
ENABLE = 1,
DISABLE = 0
};
enum : 간단한 상수 집합을 정의할 때 유용. 숫자를 이름으로 관리해 가독성 향상enum class : 타입 안전성과 스코프 제한이 필요한 경우에 적합enum class를 사용하는 것이 더 권장됨