본문으로 건너뛰기
모던 C++LESSON 06

enum class: 이름 충돌을 줄이는 열거형

난이도초급 → 중급 입문
예상 시간45분
선수지식이전 강의

6강. enum class: 이름 충돌을 줄이는 열거형

이번 강의에서 해결할 문제​

퀘스트 상태를 0, 1, 2로 저장하면 숫자의 의미를 외워야 하고 잘못된 숫자도 전달할 수 있습니다. 오래된 enum의 항목 이름은 바깥 범위로 노출되어 다른 상태의 Ready와 충돌할 수도 있습니다.

학습 목표​

  • enum class가 허용 상태를 타입으로 제한하는 방식을 설명합니다.
  • 항목 이름에 열거형 범위를 붙여 사용합니다.
  • switch로 모든 상태를 읽기 좋은 문자열로 변환합니다.

먼저 알아야 할 핵심 개념​

열거형은 가능한 값의 집합을 이름으로 정의합니다. enum class는 항목을 열거형 범위 안에 두고 정수로 암시 변환하지 않습니다. 따라서 서로 다른 열거형의 값이나 임의의 숫자가 섞이는 실수를 컴파일 단계에서 줄입니다.

가장 작은 실행 가능한 예제​

quest_state.cpp
#include <iostream>
#include <string_view>

enum class QuestState {
Locked,
Active,
Completed,
};

std::string_view toText(const QuestState state) {
switch (state) {
case QuestState::Locked: return "locked";
case QuestState::Active: return "active";
case QuestState::Completed: return "completed";
}
return "unknown";
}

int main() {
QuestState state{QuestState::Active};
std::cout << toText(state) << '\n';
}

핵심 코드 줄별 설명​

  1. QuestState는 세 상태만 허용하는 독립 타입입니다.
  2. 항목은 QuestState::Active처럼 범위를 붙여 사용합니다.
  3. toText는 상태 표현 책임을 한곳에 모읍니다.
  4. switch는 각 허용 상태를 명시적으로 처리합니다.
  5. state = 1처럼 정수를 직접 대입할 수 없습니다.

실행 결과와 값 변화​

active

초기값을 Completed로 바꾸면 completed가 출력됩니다. 숫자 값이 무엇인지 몰라도 호출부에서 상태 의미를 읽을 수 있습니다.

단계별 실습​

실습 목표​

아이템 희귀도를 타입 안전한 상태로 표현합니다.

시작 전 상태와 실행 방법​

새 C++17 파일에 Rarity 열거형과 출력 함수를 작성할 준비를 합니다.

1단계: 최소 코드 작성​

Common, Rare, Legendary 항목을 선언하고 Rare를 출력합니다.

2단계: 값 또는 조건을 바꿔 결과 비교​

초기값을 각 항목으로 바꾸며 switch 결과를 확인합니다.

3단계: 작은 기능 확장​

희귀도에 따라 판매 배율 1, 2, 5를 반환하는 함수를 추가합니다.

4단계: 스스로 해결하기​

새 Epic 항목을 추가하고 모든 switch가 빠짐없이 처리하는지 높은 경고 수준으로 확인하세요.

막혔을 때​

항목을 찾지 못한다면 Rarity::Rare처럼 열거형 이름을 붙였는지 확인합니다. 정수로 저장해야 하는 외부 형식이 있다면 경계에서만 명시 변환하고 내부에서는 열거형을 유지합니다.

흔한 실수와 해결 방법​

  • 임의의 정수로 캐스팅: 허용되지 않은 값이 생길 수 있으므로 입력 검증을 경계에 둡니다.
  • 모든 상태에 default만 사용: 새 항목 누락 경고를 받으려면 각 항목을 명시하는 편이 좋습니다.
  • 서로 다른 의미를 한 열거형에 섞음: 퀘스트 상태와 아이템 희귀도는 별도 타입으로 둡니다.

게임 개발 연결​

캐릭터 상태, 퀘스트 단계, 아이템 등급처럼 가능한 값이 제한된 게임 규칙에 적합합니다. Unreal에서 Blueprint에 노출할 열거형은 UENUM 규칙이 추가되지만 타입을 분리하는 목적은 같습니다.

이해 점검 질문 3개​

  1. enum class가 일반 정수 상태보다 안전한 이유는 무엇인가요?
  2. 항목을 QuestState::Active로 쓰는 이유는 무엇인가요?
  3. 새 항목을 추가할 때 어떤 코드를 함께 점검해야 하나요?

핵심 요약​

enum class는 허용 상태와 이름 범위를 타입에 기록합니다. 임의의 정수 대신 의미 있는 항목을 사용하고, 외부 표현 변환은 함수 한곳에서 처리합니다.

다음 강의 연결​

7강. const와 constexpr에서 상태뿐 아니라 값의 변경 가능성과 계산 시점도 코드에 표현합니다.

MINI QUIZ

enum class: 이름 충돌을 줄이는 열거형 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“enum class: 이름 충돌을 줄이는 열거형” 실습을 안전하게 진행하기 위한 판단으로 가장 알맞은 것은 무엇인가요?
  2. 문제 2‘임의의 정수로 캐스팅’ 상태에 관한 “enum class: 이름 충돌을 줄이는 열거형” 본문의 설명으로 가장 알맞은 것은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

6강. enum class: 이름 충돌을 줄이는 열거형 미완료 상태