C++의 enum class(scoped enumeration)에는 여러 가지 이점이 있습니다.
기존의 열거형(enum)에 비해 더 안전하고, 명확하며, 타입 안정성을 제공하는 기능입니다.
주요 이점은 다음과 같습니다:
- 스코프 제공 (Scoped Enums)
기존의 enum은 네임스페이스를 더럽힐 수 있습니다.
즉, 열거형의 요소들이 전역 범위로 노출되어 다른 이름과 충돌할 수 있습니다. 반면, enum class는 스코프를 제공하여 이러한 문제를 방지합니다.
enum Color { Red, Green, Blue }; // 전역 범위로 노출
enum class Color { Red, Green, Blue }; // Color 범위로 제한
위의 예에서 enum class는 Color::Red, Color::Green, Color::Blue처럼 사용되며, 전역 네임스페이스를 오염시키지 않습니다.
- 타입 안전성 (Type Safety)
기존의 enum은 암시적으로 정수형으로 변환될 수 있어 의도치 않은 버그를 유발할 수 있습니다.
반면, enum class는 명시적 형변환이 필요하므로 타입 안전성을 제공합니다.
위 같은 코드는 Red라는 enum 요소가 Color , TrafficLight에 중복으로 선언되어 있으므로
컴파일시 오류가 발생합니다.
위와 같은 소스코드는 프로젝트가 규모가 점점 커지면서, enum 요소 종류가 많아질수록 빈번하게 발생하는 오류입니다.
'
가장 바람직한 enum class 사용 예제입니다.
(enum class는 정적 캐스팅 (static_cast)을 사용하여 명시적 변환이 필요합니다. )
이제는 enum 의 요소로 Red, Green을 중복하여 사용하여도, 오류가 발생하지 않습니다.
- 기본 타입 지정 (Underlying Type Specification)
enum class는 기본적으로 int 타입이지만, 다른 기본 타입도 지정할 수 있습니다.
이를 통해 메모리 사용량을 줄이거나 특정 요구 사항을 충족할 수 있습니다.