[C++20 새기능 소개] using enum

C++20에서는 열거형(enum)을 더욱 편리하고 가독성 있게 사용할 수 있도록 using enum 구문이 도입되었습니다. 이번 글에서는 using enum의 개념과 사용법, 그리고 이전 버전에서의 접근 방식과 비교하여 어떻게 개선되었는지 알아보겠습니다.

 

using enum이란 무엇인가요?

using enum 구문은 열거형의 멤버들을 현재 범위(scope)로 가져와서 이름 없이 직접 사용할 수 있게 해주는 기능입니다. 이를 통해 열거형의 멤버를 사용할 때 매번 열거형 이름을 명시하지 않아도 되어 코드의 가독성과 편의성이 향상됩니다.

이전 버전에서는 어떻게 했나요?

C++11부터는 enum class를 사용하여 강력한 형식의 열거형을 정의할 수 있게 되었습니다. 하지만 열거형 멤버를 사용할 때마다 열거형의 이름을 앞에 붙여야 했습니다.

예제: 기존 방식의 열거형 사용

enum class Color {
    Red,
    Green,
    Blue
};

int main() {
    Color myColor = Color::Red;

    if (myColor == Color::Green) {
        // ...
    }

    return 0;
}
  • 열거형 멤버를 사용할 때마다 Color::를 붙여야 합니다.
  • 여러 번 사용하다 보면 코드가 장황해질 수 있습니다.

using enum을 사용한 개선

using enum 구문을 사용하면 열거형의 멤버들을 현재 범위로 가져와서 열거형 이름 없이도 멤버를 직접 사용할 수 있습니다.

예제: using enum 구문 사용

enum class Color {
    Red,
    Green,
    Blue
};

int main() {
    using enum Color;

    Color myColor = Red;

    if (myColor == Green) {
        // ...
    }

    return 0;
}
  • using enum Color;를 통해 Color 열거형의 멤버들을 현재 범위로 가져옵니다.
  • 이제 Red, Green, Blue를 직접 사용할 수 있습니다.

자세한 예제와 비교

1. 스위치 문에서의 사용

이전 방식

switch (myColor) {
    case Color::Red:
        // ...
        break;
    case Color::Green:
        // ...
        break;
    case Color::Blue:
        // ...
        break;
}

using enum 사용

using enum Color;

switch (myColor) {
    case Red:
        // ...
        break;
    case Green:
        // ...
        break;
    case Blue:
        // ...
        break;
}
  • using enum을 사용하면 case 레이블에서 열거형 이름을 생략할 수 있어 코드가 간결해집니다.

2. 네임스페이스와 함께 사용

이전 방식

namespace Direction {
    enum class Compass {
        North,
        South,
        East,
        West
    };
}

int main() {
    Direction::Compass dir = Direction::Compass::North;
    // ...
    return 0;
}

using enum 사용

using namespace Direction;
using enum Compass;

int main() {
    Compass dir = North;
    // ...
    return 0;
}
  • 네임스페이스와 열거형을 함께 사용할 때도 using enum을 활용하여 코드의 가독성을 높일 수 있습니다.

주의 사항

  • 이름 충돌 가능성: 현재 범위로 열거형 멤버를 가져오기 때문에 기존의 이름과 충돌할 수 있습니다. 이를 주의하여 사용해야 합니다.
  • enum class Status { OK, Error }; const int OK = 1; // 기존에 동일한 이름의 변수가 존재 int main() { using enum Status; int result = OK; // 어느 OK를 사용하는지 모호함 return 0; }
  • 열거형 멤버의 범위: using enum을 사용하면 열거형 멤버들이 현재 범위에 노출되므로, 필요하지 않은 경우에는 사용을 자제하거나 지역 범위에서 사용하는 것이 좋습니다.

using enum의 장점

  • 가독성 향상: 열거형 이름을 반복해서 쓰지 않아도 되어 코드가 간결해집니다.
  • 코드 유지보수성 증가: 열거형의 이름이 변경되더라도 코드 수정이 최소화됩니다.
  • 편의성: 특히 스위치 문이나 조건문에서 열거형 멤버를 자주 사용할 때 유용합니다.

요약

C++20의 using enum 구문은 열거형 멤버를 더욱 편리하게 사용할 수 있도록 해주는 기능입니다. 이전 버전에서는 열거형 멤버를 사용할 때마다 열거형 이름을 명시해야 했지만, 이제는 using enum을 통해 코드의 가독성과 편의성을 높일 수 있습니다.

 

 

참고 자료:

 

반응형