switch 구문 C++ 자습서 30

switch 구문 C++

switch 구문은 if else 구문과 비슷한 분기문 입니다. if else 로도 똑같은 내용의 코드를 작성할 수 있습니다만, switch 구문이 가독성이 좋은 경우가 있습니다. 예를 들어서 자판기의 버튼에 따라 1번부터 10번까지 메뉴를 선택한다고 하면 if else 문으로는 좀 더 길고 번거로운 코드가 될 수 있습니다. if 1번이 아니면 if else 2번 이 아니면 if else 이런 식으로 가지만 switch 문에서는 case 1, case 2 이런 식으로 작성할 수 있습니다.

하는 일은 같지만 가독성이 차이가 난다는 것은 중요한 부분으로 코드를 들여다 보는 사람에게 유리하게 작성할 수 있습니다.

switch 예제

아래의 예제는 switch 구문입니다. selection 과 case 를 보면 if 문법으로는 if(selection == 1), if else(selection == 2) 이런 식으로 작성되야 하지만 case 1, case 2, case 3 으로 되어 있으니 작성도 쉽고 가독성도 좋습니다. 한가지 유의할 점은 { } 블록은 순차적으로 실행이 됩니다. 그래서 case 1 마다 break 포인트를 설정해야 합니다. break 키워드 없이는 처음 선택한 case 에서 블록의 끝까지 실행합니다.

default 는 case 에서 찾지 못할 경우 기본적으로 실행되는 코드입니다. break 를 쓰는 것은 오류를 줄이기 위해 관습적으로 사용합니다. (default 아래에 case 가 있으면 break 없이 그 case 가 실행되니까)

#include<iostream>

int main()
{

    using std::cout;
    using std::cin;
    using std::endl;

    cout << "메뉴를 선택하시오.\n" << endl;
    cout << "1) 사과쥬스 " << endl;
    cout << "2) 카페라테 " << endl;
    cout << "3) 생강차 " << endl;

    int selection;
    cin >> selection;

    switch (selection)
    {
    case 1 :
        cout << "사과쥬스를 선택합니다." << endl;
        break;
    
    case 2 :
        cout << "카페라테를 선택합니다." << endl;
        break;
    
    case 3 :
        cout << "생강차를 선택합니다." << endl;
        break;
    
    default:
        cout << "선택에 없습니다." << endl;
        break;
    }

    return 0;
}

switch 문에 break 의 위치를 변화시키면 아래와 같은 코드도 가능합니다. 키보드에서 a, b, c 를 입력 받아서 동일한 결과를 얻으려면 실행문을 case ‘c’: 에 넣고 break 키워드를 넣습니다. case ‘a’: 와 case ‘b’: 는 그저 프로그램의 실행을 다음 라인으로 넘기게 되므로 같은 결과를 얻습니다. 이것도 if else 문으로 작성한다면 논리합 연산자(AND)를 사용하는 등 좀 더 번거로운(?) 코드가 될 것 입니다. 이것도 가독성을 위한 것이라고 생각할 수 있습니다.

#include<iostream>

int main()
{

    using std::cout;
    using std::cin;
    using std::endl;

    char ch;
    cin >> ch;

    switch(ch){
        case 'a':
        case 'b':
        case 'c':
            cout << "a나 b나 c를 입력한 결과" << endl;
            break;
        case 'd':
        case 'e':
        case 'f':
            cout << "d나 e나 f를 입력한 결과" << endl;
            break;
        default:
            cout << "그외의 입력" << endl;
            break;
    }
    return 0;
}

레이블에 열거자 상수 사용하기

enum 열거자 상수를 사용하면 의미가 분명한 코드를 작성할 수 있습니다. 아래 예제는 enum 으로 0부터 4 까지 열거자들을 만듭니다. 이렇게 하면 case 1: case 2: 이런 코드 보다 훨씬 가독성이 좋아집니다.

#include<iostream>

enum {apple, orange, kiwi, mango, strawberry};

int main()
{

    using std::cout;
    using std::cin;
    using std::endl;

    int fruit;
    cin >> fruit;

    switch (fruit)
    {
    case apple:
        cout << "사과를 선택합니다" << endl;
        break;
    case orange:
        cout << "오렌지를 선택합니다" << endl;
        break;
    case kiwi:
        cout << "키위를 선택합니다" << endl;
        break;
    case mango:
        cout << "망고를 선택합니다" << endl;
        break;
    case strawberry:
        cout << "딸기를 선택합니다" << endl;
        break;
    
    default:
        cout << "선택에 없습니다" << endl;
        break;
    }

    return 0;
}

요약

if else 문과 비교해서 switch 구문이 더 유용해 보이지만 정교한 코드를 작성하는 것에는 if else 문이 더 적합합니다. 상황에 따라 if else 문이나 switch 문을 적당히 선택하여 사용하면 됩니다.

참고문서

switch statement(C++) | Microsoft Docs

Leave a Comment