0Pricing
C++ Academy · 강의

스코프가 지정된 enum class

타입 안전 열거형 사용하기

스코프가 지정된 enum class은(는) CoddyKit의 무료 C++ Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C++ Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

일반 열거형은 이름을 노출합니다

전통적인 C 스타일 enum은 주변 범위에 이름을 내보내고 암묵적으로 int로 변환됩니다. 따라서 이름 충돌과 의도하지 않은 비교가 쉽게 발생합니다.

  • 열거형 클래스는 이 두 문제를 모두 해결합니다.
  • 값에 범위가 지정되고 강한 형식이 적용됩니다.
#include <iostream>
enum Color { Red, Green, Blue };
int main() {
    Color c = Green;
    int x = c; // implicit conversion to int
    std::cout << x << "\n";
}

범위가 지정된 열거형 선언하기

class(또는 struct) 키워드를 추가하면 범위가 지정된 열거형이 됩니다. 이제 각 값에 열거형 이름을 붙여야 합니다.

#include <iostream>
enum class Color { Red, Green, Blue };
int main() {
    Color c = Color::Green;
    if (c == Color::Green) std::cout << "green\n";
}

암시적 변환 없음

범위가 지정된 열거형은 암시적으로 int로 변환되지 않습니다. 따라서 실수로 산술 연산에 열거형을 사용하는 버그를 방지할 수 있습니다.

  • 숫자를 얻으려면 명시적으로 캐스팅해야 합니다.
#include <iostream>
enum class Color { Red, Green, Blue };
int main() {
    Color c = Color::Blue;
    int n = static_cast<int>(c); // explicit
    std::cout << n << "\n"; // prints 2
}

기반 형식

기본적으로 기반 형식은 int이지만, 공간을 절약하거나 프로토콜에 맞추기 위해 더 작거나 특정한 정수 형식을 선택할 수 있습니다.

#include <iostream>
#include <cstdint>
enum class Status : std::uint8_t { Ok = 0, Warn = 1, Error = 2 };
int main() {
    Status s = Status::Warn;
    std::cout << static_cast<int>(s) << "\n";
}

사용자 지정 값

열거자에 명시적인 값을 할당할 수 있습니다. 명시적인 값 뒤에 오는 값은 해당 값부터 계속 증가합니다.

#include <iostream>
enum class Http { Ok = 200, NotFound = 404, ServerError = 500 };
int main() {
    Http h = Http::NotFound;
    std::cout << static_cast<int>(h) << "\n";
}

열거형을 기준으로 분기하기

열거형은 switch 문 안에서 특히 유용합니다. 모든 case를 나열하면 의도가 명확해지고 컴파일러가 누락된 case를 경고할 수 있습니다.

#include <iostream>
enum class Dir { North, East, South, West };
const char* name(Dir d) {
    switch (d) {
        case Dir::North: return "N";
        case Dir::East:  return "E";
        case Dir::South: return "S";
        case Dir::West:  return "W";
    }
    return "?";
}
int main() { std::cout << name(Dir::East) << "\n"; }

함수 인수로 열거형 사용하기

범위가 지정된 열거형을 전달하면 단순한 int나 bool을 전달하는 것보다 의도를 훨씬 명확하게 표현할 수 있습니다. 컴파일러는 유효한 열거형 값만 사용되는지 확인합니다.

#include <iostream>
enum class Align { Left, Center, Right };
void render(const char* text, Align a) {
    std::cout << text << " aligned " << static_cast<int>(a) << "\n";
}
int main() { render("Hi", Align::Center); }

열거형 값 비교하기

범위가 지정된 열거형은 == 및 !=을 직접 지원합니다. 관계 연산자(<, >)도 값에 순서가 지정되어 있으므로 사용할 수 있습니다.

#include <iostream>
enum class Level { Low, Medium, High };
int main() {
    Level l = Level::High;
    std::cout << (l > Level::Low ? "above low\n" : "low\n");
}

개념적으로 순회하기

열거형은 자동으로 순회되지 않지만, 일반적인 방법은 기반 정수 형식을 거쳐 캐스팅하는 것입니다. 범위를 알 수 있도록 Count 같은 센티널을 두십시오.

#include <iostream>
enum class Coin { Penny, Nickel, Dime, Count };
int main() {
    for (int i = 0; i < static_cast<int>(Coin::Count); ++i)
        std::cout << i << " ";
    std::cout << "\n";
}

형식 안전성이 중요한 이유

서로 관련 없는 두 범위 지정 열거형은 둘 다 None이라는 값을 갖더라도 실수로 섞일 수 없습니다. 컴파일러가 이들을 서로 다른 형식으로 취급하기 때문입니다.

#include <iostream>
enum class Fruit { None, Apple };
enum class Tool  { None, Hammer };
int main() {
    Fruit f = Fruit::None;
    // Tool t = f; // would NOT compile
    std::cout << (f == Fruit::None) << "\n";
}

일반 열거형을 사용하는 경우

일반 열거형은 암시적인 int 변환이 편리한 레거시 API와 비트 플래그 코드에서 여전히 사용됩니다. 새 코드에서는 특별한 이유가 없다면 열거형 클래스를 우선 사용하십시오.

빠른 확인

범위가 지정된 열거형에 대한 이해도를 확인해 보십시오.

복습

범위가 지정된 열거형을 배웠습니다.

  • enum class는 값에 범위를 지정하고 암시적인 int 변환을 차단합니다.
  • 숫자를 읽으려면 static_cast<int>를 사용하십시오.
  • : type으로 기반 형식을 선택하십시오.
  • 형식 안전성과 자체 설명성을 갖춘 코드를 위해 enum class를 우선 사용하십시오.

자주 묻는 질문

“스코프가 지정된 enum class” 강의는 무료인가요?

네 — “스코프가 지정된 enum class” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C++ Academy 강의 전체를 잠금 해제할 수 있습니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“스코프가 지정된 enum class”에서 뭘 배우나요?

타입 안전 열거형 사용하기 브라우저에서 직접 실행하는 실습 코드로 C++ Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

C++ Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 C++ Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“스코프가 지정된 enum class” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 C++ Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 C++ Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 스코프가 지정된 enum class
  2. 공용체와 그 위험성
  3. std::variant
  4. std::visit
← C++ Academy(으)로 돌아가기