영역 제한 열거형 enum class 본문
Scoped Enumerations(Enum class) C++ 11
열거형(enum)은 C++ 에서 고유한 유형이지만,
형식이 안전하지 않으므로 어떤 경우에는 이해가 되지 안는 작업을 수행할 수 있다.
앞에서 enum의 단점, 주의해야할 것들이 있었는데
이 단점들 중 일부를 보완하기 위해서 만든 영역제한열거형을 enum class 라고 부른다.
참고로 enum struct도 있는데 enum struct 보다는 enum class를 많이 쓴다.
color와 fruit를 비교했을 때 둘 다 내부적으로 숫자 0이기 때문에
int로 바꿔서 비교하니까 두 개가 같다고 나온다.
프로그래머 입장에서는 실수할 가능성이 높아진다.
그래서 enum class 라는 것을 사용 할 수 있다.
이렇게 비교를 하면 못하게 막아버린다.
물론 이렇게 static_cast로 강제변환해서 비교를 할 수는 있다.
하지만 원하는 바가 아니다.
내부적으로 int가 저장된다는 점을 이용해서 강제로 바꿔가면서 테스트 해 볼 수는 있지만
실전 프로그래밍 할 때는 이렇게 문제가 될 일을 만들어서 하지는 않는다.
일반 열거형(enum)을 사용하면 열거자(Ex. RED)는 열거형 자체와 같은 범위에 있으므로 직접 접근할 수 있다.
그러나 열거형 클래스(enum class)의 강력한 범위 규칙은 모든 열거자를 열거형 일부로 간주하므로
범위 한정자(::)를 사용하여 열거자 (Ex. Color::RED)에 접근해야 한다.
이는 이름 충돌을 방지하는 데 도움이 된다.
열거형 클래스(enum class)의 강력한 형식 규칙은 고유한 자료형으로 간주함을 의미한다.
그래서 컴파일러가 다른 열거형의 열거자와 암시적으로 비교하지 않는다.
그러나 같은 열거형 클래스 내의 열거자 끼리는 비교할 수 있다.
이처럼 color 끼리는 비교가 된다.
같은 enum 끼리는 비교가능한데 다른 enum 끼리는 비교가 안되게 막혀있다.
어떻게 보면 namespace로 묶어준것이랑 비슷하다.
'💘 C++ > 변수범위, 변수형' 카테고리의 다른 글
구조체 struct (0) | 2022.01.23 |
---|---|
자료형에게 가명 붙여주기 Type aliases, 고정너비 정수 fixed-width integers (0) | 2022.01.23 |
열거형 enumerated types (0) | 2022.01.23 |
문자열 std::string (0) | 2022.01.23 |
형변환 Type Conversion (0) | 2022.01.17 |