[C++] c++ 11 enum class의 이점이 뭐야?

ljkoy26·2024년 6월 30일
0

c++ enum class의 이점이 뭐야?

C++의 enum class(scoped enumeration)에는 여러 가지 이점이 있습니다.
기존의 열거형(enum)에 비해 더 안전하고, 명확하며, 타입 안정성을 제공하는 기능입니다.
주요 이점은 다음과 같습니다:

  1. 스코프 제공 (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처럼 사용되며, 전역 네임스페이스를 오염시키지 않습니다.

  1. 타입 안전성 (Type Safety)

기존의 enum은 암시적으로 정수형으로 변환될 수 있어 의도치 않은 버그를 유발할 수 있습니다.
반면, enum class는 명시적 형변환이 필요하므로 타입 안전성을 제공합니다.

위 같은 코드는 Red라는 enum 요소가 Color , TrafficLight에 중복으로 선언되어 있으므로
컴파일시 오류가 발생합니다.
위와 같은 소스코드는 프로젝트가 규모가 점점 커지면서, enum 요소 종류가 많아질수록 빈번하게 발생하는 오류입니다.

아래와 같은 방법을 사용할수도 있습니다. 그러나 매번 요소마다 전위 명칭을 추가하는것은 바람직하지 않으며 변수 명칭 생성에도 비효율적입니다.

'

* namespace를 사용하여 범위를 묶기도 합니다. 그러나 namespace는 enum을 묶기에만 사용하는 키워드는 아니기에, 키워드가 가져다 주는 의미를 깊게 생각해보는것이 좋습니다.

( 키워드의 스코프를 생각한 측면에서 키워드가 본래 만들어진 이유를 생각하는것이 바람직합니다. )

가장 바람직한 enum class 사용 예제입니다.
(enum class는 정적 캐스팅 (static_cast)을 사용하여 명시적 변환이 필요합니다. )

이제는 enum 의 요소로 Red, Green을 중복하여 사용하여도, 오류가 발생하지 않습니다.

  1. 기본 타입 지정 (Underlying Type Specification)

enum class는 기본적으로 int 타입이지만, 다른 기본 타입도 지정할 수 있습니다.
이를 통해 메모리 사용량을 줄이거나 특정 요구 사항을 충족할 수 있습니다.

profile
MFC, C++, DBMS, Oracle, DB2

0개의 댓글

관련 채용 정보