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;
}
열거체(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 증가한 값이 할당됩니다.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
에 명시된 값과 일치하면 해당 블록이 실행됩니다.case
와 break
: 각 case
블록은 특정 값과 비교하며, 일치할 경우 해당 블록이 실행됩니다. break
문을 사용하면 현재 블록을 종료하고 switch
문을 빠져나갑니다. break
문이 없으면 다음 case
구문이 연속으로 실행될 수 있습니다.default
블록: case
중 어떤 것도 일치하지 않을 때 default
블록이 실행됩니다. default
는 선택사항이지만, 추가하면 예상하지 못한 값에 대한 처리가 가능해집니다.열거체 타입 변수 선언과 사용
NUM eNum; // = 10; // 에러 발생
NUM
열거체를 사용하여 변수 eNum
을 선언합니다. 열거체 타입의 변수는 선언된 열거체의 값만 가질 수 있으며, 열거체에 정의되지 않은 값을 직접 할당하려고 하면 에러가 발생합니다.eNum = (NUM)10;
처럼 명시적 타입 캐스팅을 통해 열거체 범위 밖의 값을 할당할 수 있지만, 이는 권장되지 않습니다.메모리 크기와 타입 확인
cout << sizeof(eNum) << endl;
cout << typeid(eNum).name() << endl;
sizeof
연산자: sizeof
를 사용하여 변수나 타입의 메모리 크기를 확인할 수 있습니다. 열거체 타입의 변수는 4바이트의 메모리를 차지합니다.typeid
연산자: typeid
를 사용하여 변수나 타입의 실제 타입 정보를 확인할 수 있습니다. typeid(eNum).name()
은 eNum
변수의 타입 이름을 문자열로 반환합니다.C++에서 열거체(enum
)와 switch
문은 특정 값에 이름을 부여하고, 그 값을 기준으로 프로그램의 흐름을 제어하는 데 매우 유용한 도구입니다. 열거체를 사용하면 코드의 가독성과 유지보수성이 향상되며, switch
문을 통해 값에 따라 분기 처리를 쉽게 구현할 수 있습니다.
이 포스트에서는 열거체와 switch
문에 대해 기본적인 사용법과 함께 실제 코드를 통해 어떻게 동작하는지 설명했습니다. 이를 통해 열거체와 분기문을 더 깊이 이해하고, 실무에 적용하는 데 도움이 되었기를 바랍니다.