[c++] switch문에서 정수 외의 다른 자료형 사용

C++의 switch 문은 정수형 값을 기반으로 한 조건 분기에 주로 사용됩니다. 하지만 C++11부터는 정수형 이외의 다른 자료형도 switch 문에서 사용할 수 있습니다.

정수형 이외의 자료형 사용하기

C++11에서는 switch 문에서 정수형 외의 자료형인 열거형 (enum), 문자열 (string), 또는 사용자 정의 객체 등을 사용할 수 있습니다.

열거형(enums) 사용하기

enum class Color { Red, Green, Blue };

Color color = Color::Green;

switch (color) {
    case Color::Red:
        // 빨강일 때 실행되는 코드
        break;
    case Color::Green:
        // 초록일 때 실행되는 코드
        break;
    case Color::Blue:
        // 파랑일 때 실행되는 코드
        break;
    default:
        // 다른 경우 실행되는 코드
        break;
}

문자열(string) 사용하기

C++11 이전에는 switch 문에서 문자열을 직접 사용할 수 없었지만, C++11에서는 std::string을 사용하여 문자열을 switch 문에서 사용할 수 있습니다.

#include <iostream>
#include <string>

int main() {
    std::string fruit = "apple";

    switch (hash<std::string>{}(fruit)) {
        case hash<std::string>{}("apple"):
            std::cout << "apple" << std::endl;
            break;
        case hash<std::string>{}("banana"):
            std::cout << "banana" << std::endl;
            break;
        default:
            std::cout << "other" << std::endl;
            break;
    }

    return 0;
}

사용자 정의 클래스 또는 객체 사용하기

사용자 정의 클래스나 객체도 switch 문에서 사용할 수 있습니다. 그러나 해당 클래스나 객체는 비교 연산자 (==)를 오버로딩하여 비교 연산을 가능케 해야합니다.

자료형에 따른 제약 사항

다른 자료형을 switch 문에서 사용할 때, 각 case의 값은 상수만 가능합니다. 이는 switch 문의 동작 방식과 관련이 있습니다.

switch 문은 정수형을 기반으로 분기하기 때문에, 상수 값에 대한 판별이 가능해야 합니다.

결론

C++11부터는 switch 문에서 정수형 이외의 다른 자료형을 사용할 수 있게 되었습니다. 이를 통해 코드를 더욱 읽기 쉽고 유지보수하기 쉽게 만들 수 있습니다.

참고문헌: https://en.cppreference.com/w/cpp/language/switch