switch문과 열거체

Jaemyeong Lee·2024년 8월 18일
0

어소트락2017

목록 보기
8/20

C++에서의 열거체와 switch 문: 코드 분석 및 설명

이번 블로그 포스트에서는 C++의 열거체(enum)와 switch 문에 대해 설명합니다. 열거체는 연속된 숫자에 이름을 부여할 수 있는 기능이며, switch 문은 주어진 값에 따라 코드의 분기를 처리할 수 있는 구문입니다. 예제 코드를 통해 각 개념을 하나씩 분석해보겠습니다.

예제 코드

#include <iostream>
using namespace std;

/*
 * 열거체: 연속된 숫자에 이름을 부여할 수 있는 기능이다.
 * 즉, enum 열거체명 {}의 형태로 구성된다.
 * 열거체를 이용해서 열거체 타입의 변수를 선언도 가능하다.
 * 즉, 열거체 자체가 사용자 정의 변수 타입이 될 수 있다.
 * 열거체는 숫자에 이름을 붙여주는 기능이다.
 */
enum NUM
{
    NUM_0 = 10, // 아무것도 부여하지 않을 경우 0부터 1씩 차례로 값이 부여된다.
    NUM_1,
    NUM_2,
    NUM_3,
};

#define NUM_4 4

int main()
{
    /*
     * switch 문: 분기문의 한 종류이다. if문이 조건을 체크하는 분기문이라면
     * switch문은 값이 뭔지 체크하는 분기문이다.
     * 형태: switch(변수)의 형태로 구성된다. 코드 블럭 안에는 case, break 구문이 들어가게 된다.
     * case 상수: 의 형태로 처리가 되고 변수 값이 무엇인지에 따라서 case 뒤에 오는 상수를 비교하게 된다.
     */

    int iNumber;
    cout << "숫자를 입력하세요: ";
    cin >> iNumber;

    switch (iNumber)
    {
    case NUM_1: // iNumber 값이 무엇인지에 따라서 실행되는 case 구문이 결정된다.
        cout << "입력한 숫자는 1입니다." << endl;
        break;
    case NUM_2:
        cout << "입력한 숫자는 2입니다." << endl;
        // break가 없을 경우 바로 아래에 있는 case 구문도 강제로 실행이 되게 된다.
    case NUM_3:
        cout << "입력한 숫자는 3입니다." << endl;
        break;
    case NUM_4:
        cout << "입력한 숫자는 4입니다." << endl;
        break;
    default: // case로 지정되어 있지 않은 숫자가 들어올 경우 실행된다.
        cout << "그 외의 숫자입니다." << endl;
        break;
    }

    // 열거체 타입의 변수를 선언했다.
    // 열거체 타입 변수는 무조건 4바이트를 차지하게 된다.
    // 열거체를 이용해서 선언한 변수는 값의 표현 범위가 열거체에 나열된 값들 안에서 선택해서 사용한다.
    NUM eNum; // = 10; // 에러 발생

    // eNum = (NUM)10; 타입 캐스팅을 하면 가능

    // sizeof(타입 or 변수)를 하게 되면 해당 타입 혹은 변수의 메모리 크기를 구해준다.
    cout << sizeof(eNum) << endl;

    // typeid(타입 or 변수).name()을 하게 되면 typeid 안에 들어간 타입 혹은 변수의 타입을 문자열로 반환해준다.
    cout << typeid(eNum).name() << endl;

    return 0;
}

코드 분석 및 설명

  1. 열거체(enum)의 정의와 사용

    enum NUM
    {
        NUM_0 = 10, // 아무것도 부여하지 않을 경우 0부터 1씩 차례로 값이 부여된다.
        NUM_1,
        NUM_2,
        NUM_3,
    };
    • 열거체 정의: enum 키워드를 사용하여 열거체를 정의합니다. 열거체는 연속된 숫자에 의미 있는 이름을 부여하는 데 사용됩니다.
    • 기본값: NUM_0은 10으로 초기화되며, 그 다음 값인 NUM_1, NUM_2, NUM_3은 각각 11, 12, 13이 됩니다. 열거체에 아무 값도 지정하지 않으면, 자동으로 이전 값보다 1 증가한 값이 할당됩니다.
    • 사용 방법: 열거체 타입의 변수를 선언하여 열거체 값을 저장할 수 있습니다.
  2. switch

    switch (iNumber)
    {
    case NUM_1:
        cout << "입력한 숫자는 1입니다." << endl;
        break;
    case NUM_2:
        cout << "입력한 숫자는 2입니다." << endl;
    case NUM_3:
        cout << "입력한 숫자는 3입니다." << endl;
        break;
    case NUM_4:
        cout << "입력한 숫자는 4입니다." << endl;
        break;
    default:
        cout << "그 외의 숫자입니다." << endl;
        break;
    }
    • switch: switch 문은 분기문으로, 주어진 변수의 값에 따라 다른 코드를 실행합니다. switch 문 안에는 case 구문이 들어가며, 변수의 값이 case에 명시된 값과 일치하면 해당 블록이 실행됩니다.
    • casebreak: 각 case 블록은 특정 값과 비교하며, 일치할 경우 해당 블록이 실행됩니다. break 문을 사용하면 현재 블록을 종료하고 switch 문을 빠져나갑니다. break 문이 없으면 다음 case 구문이 연속으로 실행될 수 있습니다.
    • default 블록: case 중 어떤 것도 일치하지 않을 때 default 블록이 실행됩니다. default는 선택사항이지만, 추가하면 예상하지 못한 값에 대한 처리가 가능해집니다.
  3. 열거체 타입 변수 선언과 사용

    NUM eNum; // = 10; // 에러 발생
    • 열거체 타입 변수 선언: NUM 열거체를 사용하여 변수 eNum을 선언합니다. 열거체 타입의 변수는 선언된 열거체의 값만 가질 수 있으며, 열거체에 정의되지 않은 값을 직접 할당하려고 하면 에러가 발생합니다.
    • 타입 캐스팅: eNum = (NUM)10;처럼 명시적 타입 캐스팅을 통해 열거체 범위 밖의 값을 할당할 수 있지만, 이는 권장되지 않습니다.
  4. 메모리 크기와 타입 확인

    cout << sizeof(eNum) << endl;
    cout << typeid(eNum).name() << endl;
    • sizeof 연산자: sizeof를 사용하여 변수나 타입의 메모리 크기를 확인할 수 있습니다. 열거체 타입의 변수는 4바이트의 메모리를 차지합니다.
    • typeid 연산자: typeid를 사용하여 변수나 타입의 실제 타입 정보를 확인할 수 있습니다. typeid(eNum).name()eNum 변수의 타입 이름을 문자열로 반환합니다.

결론

C++에서 열거체(enum)와 switch 문은 특정 값에 이름을 부여하고, 그 값을 기준으로 프로그램의 흐름을 제어하는 데 매우 유용한 도구입니다. 열거체를 사용하면 코드의 가독성과 유지보수성이 향상되며, switch 문을 통해 값에 따라 분기 처리를 쉽게 구현할 수 있습니다.

이 포스트에서는 열거체와 switch 문에 대해 기본적인 사용법과 함께 실제 코드를 통해 어떻게 동작하는지 설명했습니다. 이를 통해 열거체와 분기문을 더 깊이 이해하고, 실무에 적용하는 데 도움이 되었기를 바랍니다.

profile
李家네_공부방

0개의 댓글