Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 열거형(enum) 완벽 가이드: 개념부터 실전 활용까지

C++ 열거형(enum)이란?

열거형(enumerated type)은 사용자가 직접 정의하는 데이터 타입으로, 미리 정해 놓은 값의 집합 중 하나만 가질 수 있습니다.

프로그래밍에서 열거형은 변수가 특정 값 집합 중 하나만 저장하도록 제한하고 싶을 때 자주 사용됩니다. 예를 들어, 변수에 요일 값만 저장되기를 원한다면 열거형을 활용하는 것이 좋은 선택입니다.

이 글에서는 예제와 함께 C++ 열거형의 기본 개념, 열거형을 정의하는 방법, 그리고 코드에서 열거형을 사용하는 방법까지 차근차근 살펴봅니다. 끝까지 읽고 나면 C++에서 enum을 능숙하게 다룰 수 있게 될 것입니다.

C++ 열거형의 기본 구조

열거형(enum type)은 가능한 값의 범위가 고정된 사용자 정의 데이터 타입을 만들 때 사용합니다.

C++에서 열거형을 정의할 때는 enum 키워드를 사용합니다. 기본 문법은 다음과 같습니다.

enum 이름 {
    첫번째값, 두번째값, 세번째값, 네번째값
};

문법의 각 요소를 하나씩 살펴보겠습니다.

  • enum: 열거형을 생성하겠다고 컴파일러에 알려 주는 키워드입니다.
  • 이름: 열거형에 부여하는 이름입니다.
  • 첫번째값, 두번째값, 세번째값, 네번째값: 열거형에 포함되는 값들로, 중괄호({}) 안에 쉼표로 구분하여 나열합니다.

특별히 값을 지정하지 않으면, 열거형의 값들은 내부적으로 0부터 시작하는 정수(0, 1, 2, ...)가 자동으로 할당됩니다. 물론 아래처럼 각 값에 원하는 숫자를 직접 지정할 수도 있습니다.

enum 이름 {
    첫번째값 = 0,
    두번째값 = 1
};

이 문법에서 열거형은 두 개의 값을 가지며, 첫 번째 값은 0, 두 번째 값은 1로 설정됩니다.

열거형이 유용한 이유는 변수가 가질 수 있는 값의 범위를 명확하게 정의할 수 있기 때문입니다. 예를 들어 변수에 요일만 저장하고 싶다면 열거형으로 선언함으로써 "이 변수에는 요일만 들어간다"는 의도를 코드상으로 명확하게 드러낼 수 있습니다.

열거형 선언하기

도넛 가게 계산대 직원이 손님의 주문을 기록하고 도넛 가격을 계산하는 프로그램을 만든다고 가정해 보겠습니다.

우리 가게는 판매하는 도넛 종류가 정해져 있으므로, 재고에 있는 도넛에 대한 주문만 입력받고 싶습니다. 프로그램에서 처리할 도넛 맛은 라즈베리(Raspberry), 딸기(Strawberry), 슈가파우더(Powdered), 초콜릿(Chocolate), 시나몬(Cinnamon)입니다.

이런 상황에서 열거형이 빛을 발합니다. 프로그램이 위에서 언급한 맛의 주문만 처리하도록 제한할 수 있기 때문입니다. 다음과 같이 C++ 열거형을 선언할 수 있습니다.

enum Flavors {
    Raspberry, Strawberry, Powdered, Chocolate, Cinnamon
};

이 코드에서는 다섯 가지 가능한 값을 가진 Flavors라는 열거형을 선언했습니다. 이제 이 열거형 타입의 변수에는 열거형에 선언된 다섯 가지 값만 저장할 수 있습니다.

Flavors 열거형의 값만 담을 수 있는 변수를 선언하려면 다음과 같이 작성합니다.

enum Flavors orderFlavor;

이렇게 선언한 orderFlavor 변수는 Flavors 열거형에 있는 값만 저장할 수 있습니다.

열거형 사용하기

열거형을 선언했으니 이제 코드에서 실제로 사용해 보겠습니다. 앞서 살펴본 도넛 가게 예제로 돌아가, 열거형을 어떻게 활용하는지 알아보겠습니다.

계산대 직원이 손님의 주문을 기록하는 프로그램을 만들고 있다고 합시다. 방금 라즈베리 도넛 주문이 들어왔고, 프로그램에 이 주문을 기록하려고 합니다. 다음 코드로 구현할 수 있습니다.

#include <iostream>

using namespace std;

enum Flavors {
    Raspberry, Strawberry, Powdered, Chocolate, Cinnamon
};

int main() {
    enum Flavors orderFlavor;
    orderFlavor = Raspberry;

    cout << "주문한 도넛: 라즈베리 도넛 1개" << endl;

    return 0;
}

실행 결과:

주문한 도넛: 라즈베리 도넛 1개

코드를 하나씩 분석해 보겠습니다. 먼저, 도넛 가게에서 판매하는 맛을 저장하는 Flavors라는 열거형을 선언했습니다.

그다음, 손님이 주문한 도넛 종류를 추적하는 orderFlavor 변수를 선언했습니다. 이 변수는 Flavors 열거형의 값만 저장할 수 있으며, 그다음 줄에서 Raspberry 값을 대입했습니다.

참고로 열거형 값은 내부적으로 정수로 관리됩니다. 별도로 지정하지 않으면 Raspberry는 0, Strawberry는 1처럼 순서대로 번호가 매겨집니다. 따라서 orderFlavor를 그대로 출력하면 맛의 이름이 아니라 0이라는 숫자가 출력됩니다. 맛의 이름을 화면에 보여 주려면 위 예제처럼 문자열을 함께 출력하거나, 조건문이나 배열 등으로 이름을 변환해 주어야 합니다.

이 예제에서 볼 수 있듯이, 열거형을 사용하면 코드의 가독성이 크게 향상됩니다. orderFlavor 변수가 Flavors 열거형의 값만 가질 수 있다는 사실이 코드만 보고도 명확하게 드러납니다. 더 복잡한 프로그램이라면 다뤄야 할 변수가 많아지므로, 열거형을 활용하는 장점은 더욱 두드러질 것입니다.

열거형 기본값 변경하기

열거형의 각 값에는 원하는 기본값을 직접 지정할 수도 있습니다. 예를 들어, 특정 도넛의 가격을 알려 주는 프로그램을 만든다고 가정해 봅시다. 손님이 주문할 수 있는 도넛 종류가 정해져 있으므로 열거형을 사용하기에 적합합니다.

단, 한 가지 주의할 점이 있습니다. C++에서 열거형의 값으로 지정할 수 있는 것은 정수(integer)뿐입니다. 소수점이 있는 실수는 열거형 값으로 사용할 수 없으므로, 여기서는 가격을 센트 단위의 정수로 저장하는 방식을 사용하겠습니다.

#include <iostream>

using namespace std;

enum Prices {
    Raspberry = 200,   // $2.00
    Strawberry = 200,  // $2.00
    Powdered = 175,    // $1.75
    Chocolate = 190,   // $1.90
    Cinnamon = 220     // $2.20
};

int main() {
    enum Prices orderPrice;
    orderPrice = Raspberry;

    cout << "도넛 가격: $" << orderPrice / 100.0 << endl;

    return 0;
}

실행 결과:

도넛 가격: $2

이 예제에서는 열거형의 각 값에 기본값을 직접 할당했습니다. 이렇게 하면 열거형의 값을 참조할 때 이름 대신 지정된 값이 반환됩니다. 예를 들어 Chocolate를 참조하면 190이, Cinnamon을 참조하면 220이 반환됩니다.

메인 함수에서는 먼저 Prices 열거형으로 가능한 값을 제한한 orderPrice 변수를 선언하고, 여기에 Prices 열거형에서 Raspberry에 해당하는 값을 대입했습니다.

그다음 줄에서는 "도넛 가격: $" 문장을 콘솔에 출력하고, orderPrice 변수에 저장된 가격을 이어서 출력합니다. 손님이 주문한 것은 2달러짜리 라즈베리 도넛이므로, 최종적으로 "도넛 가격: $2"가 출력됩니다. (orderPrice를 100.0으로 나누어 달러 단위로 변환했습니다.)

마무리: C++ 열거형 정리

열거형(enum) 데이터 타입은 고정된 값 집합만 저장할 수 있는 데이터 타입을 만드는 데 사용됩니다. 예를 들어, 계절을 저장하는 열거형에는 봄, 여름, 가을, 겨울만 담길 수 있습니다. 변수가 특정 값 집합 중 하나만 가질 수 있도록 제한해야 할 때 열거형은 매우 유용합니다.

이 글에서는 예제와 함께 C++에서 열거형을 생성하는 방법, 열거형을 사용하는 방법, 그리고 열거형의 기본값을 변경하는 방법을 살펴보았습니다. 이제 여러분도 C++에서 enum을 자신 있게 활용할 준비가 되었습니다!