14. 조건문: switch 문으로 다양한 조건 처리하기

  • 14 minutes to read

선택문인 switch 문은 값에 따라서 다양한 제어를 처리할 수 있습니다. 앞서 살펴본 다중 if 문을 사용할 때 조건을 처리할 내용이 많을 경우에 그 대체 구문으로 switch 문을 사용할 수 있습니다. 이 강의에서 switch 문은 switch 선택문, switch 분기문으로도 부릅니다.

> // 선택문(`switch` 문): switch와 case 그리고 default 키워드를 사용하여 다양한 조건 처리

14.1. switch 문 소개

switch 문의 모양은 다음과 같습니다.

switch (표현식)
{
    case 값1 : 실행문1; break;
    case 값2 : 실행문2; break;
    ...
    default: 실행문n; break;
}

표현식의 결괏값이 '값1'이면 '실행문1'을 수행하고, '값2'면 '실행문2'를 수행하는 식으로 표현식에 맞는 실행문을 수행합니다.

switch 문에는 추가적으로 case 키워드와 default 키워드가 사용되는데요 이를 case 레이블, default 레이블이라고 합니다. case 레이블은 상수(값)가 들어오고, default 레이블은 생략 가능합니다.

switch 문을 순서도로 표현하면 다음 그림과 같습니다.

switch 문 순서도

선택문으로 다양한 조건 처리하기 의사 코드

C# 대화형 또는 아무 프로젝트를 만들고 다음 2개의 코드 조각을 연습해 보세요.

> var result = "";
> 
> switch (3)
. {
.     case 1:
.         result = "1을 선택하셨군요.";
.         break;
.     case 2:
.         result = "2를 선택하셨군요.";
.         break;
.     default:
.         result = "1과 2 이외의 다른 값을 선택하셨군요.";
.         break;
. }
> 
> result
"1과 2 이외의 다른 값을 선택하셨군요."
>

> var result = "";
> 
> switch ('A')
. {
.     case 'A':
.         result = "'A'를 선택하셨군요.";
.         break;
.     case 'B':
.         result = "'B'를 선택하셨군요.";
.         break;
.     default:
.         result = "'A', 'B' 이외의 다른 값을 선택하셨군요.";
.         break;
. }
> 
> result
"'A'를 선택하셨군요."
>

switch 문 사용하기

이번에는 switch 문을 사용해보겠습니다.

코드: SwitchExpression.cs

// `switch` 문: 선택문
using System;

class SwitchExpression
{
    static void Main()
    {
        int x = 2;

        switch (x)
        {
            case 1:
                Console.WriteLine("1입니다."); // x가 1일 때 실행
                break;
            case 2:
                Console.WriteLine("2입니다."); // x가 2일 때 실행
                break;
        }
    }
}
2입니다.

변수 x의 값을 1로 두면 "1입니다."가 출력되고 x의 값을 2로 두면 "2입니다."가 출력됩니다. 1과 2 이외의 값을 지정하면 현재 switch 문은 아무것도 출력하지 않습니다. 이와 같이 객관식 문제에서 하나를 선택하는 유형을 처리할 때와 같이 선택할 내용이 많을 때 switch 문이 유용합니다.

입력한 값에 따른 출력 구문을 switch 문으로 선택하기

다음은 사용자로부터 정수를 입력 받은 후 1, 2, 3일 경우에는 그에 해당하는 문자열을 출력하여 나머지 정수는 default 레이블에서 지정한 문자열을 출력하도록 하는 예제입니다.

코드: Switch.cs

using System;

class Switch
{
    static void Main()
    {
        Console.WriteLine("정수를 입력하세요.");
        int answer = Convert.ToInt32(Console.ReadLine());

        // 선택문
        switch (answer)
        {
            case 1:
                Console.WriteLine("1을 선택했습니다.");
                break;
            case 2:
                Console.WriteLine("2을 선택했습니다.");
                break;
            case 3:
                Console.WriteLine("3을 선택했습니다.");
                break;
            default:
                Console.WriteLine("그냥 찍으셨군요.");
                break;
        }
    }
}
정수를 입력하세요.
3
3을 선택했습니다.

위 프로그램을 실행 후 원하는 값을 입력 후 그에 해당하는 문자열이 출력되는지 확인해보세요.

좋아하는 프로그래밍 언어 선택하기

가장 좋아하는 프로그래밍 언어를 물어보는 프로그램을 다음과 같이 switch 문을 사용하여 만들 수 있습니다.

코드: SwitchStatement.cs

using System;
using static System.Console;

class SwitchStatement
{
    static void Main()
    {
        WriteLine("가장 좋아하는 프로그래밍 언어는? ");
        Write("1. C\t");
        Write("2. C++\t");
        Write("3. C#\t");
        Write("4. Java\n");

        int choice = Convert.ToInt32(ReadLine());

        switch (choice)
        {
            case 1:
                WriteLine("C언어 선택");
                break;
            case 2:
                WriteLine("C++ 선택");
                break;
            case 3:
                WriteLine("C# 선택");
                break;
            case 4:
                WriteLine("Java 선택");
                break;
            default:
                WriteLine("C, C++, C#, Java가 아니군요.");
                break;
        }
    }
}
가장 좋아하는 프로그래밍 언어는?
1. C    2. C++  3. C#   4. Java
3
C# 선택

이 예제는 switch 문을 사용하여 사용자의 선택에 따라 다른 메시지를 출력하는 방법을 보여줍니다. 이러한 선택 메뉴는 사용자 친화적인 인터페이스를 제공하면서 다양한 옵션 중 하나를 선택하게 하는 데 유용할 수 있습니다. switch 문의 활용은 단순히 값을 비교하는 것뿐만 아니라, 프로그램의 흐름을 제어하는 데에도 중요한 역할을 하므로 꼭 숙지해두시길 바랍니다.

switch 문을 사용하여 오늘 날씨를 물어보기

오늘 날씨를 문자열로 입력받은 후 그에 해당하는 메시지를 출력하는 예제를 만들어 보겠습니다.

코드: SwitchWeather.cs

// `switch` 문: 선택문
using System;

class SwitchWeather
{
    static void Main()
    {
        Console.WriteLine("오늘 날씨는 어떤가요? (맑음, 흐림, 비, 눈, ...)");
        string weather = Console.ReadLine();

        switch (weather)
        {
            case "맑음":
                Console.WriteLine("오늘 날씨는 맑군요.");
                break;
            case "흐림":
                Console.WriteLine("오늘 날씨는 흐리군요.");
                break;
            case "비":
                Console.WriteLine("오늘 날씨는 비가 오는군요.");
                break;
            default:
                Console.WriteLine("혹시 눈이 내리나요?");
                break;
        }
    }
}
오늘 날씨는 어떤가요? (맑음, 흐림, 비, 눈, ...)
맑음
오늘 날씨는 맑군요.

이번 예제처럼 case 레이블에 문자열로 값을 비교하는 것도 가능합니다.

장 요약

무언가를 편하게 선택해주는 선택문인 switch 문을 알아보았습니다. 이 switch 문은 뒤에서 패턴 매칭을 다룰 때에도 사용될 예정입니다. 조건문과 선택문을 알아봤으니 계속해서 반복문을 알아보도록 하겠습니다.


조건문 퀴즈 및 연습문제

퀴즈

(1) 다음 switch 문에서 잘못된 부분은 무엇인가요?

using System;

class SwitchQuiz
{
    static void Main()
    {
        string result = "";
        string color = "green";

        switch (color)
        {
            case "red";
                result = "빨강";
                break;
            case "green":
                result = "초록";
                break;
            default:
                result = "기타 색상";
                break;
        }
    }
}

정답: j

case 레이블 뒤에는 :(콜론)을 사용해야 합니다.


(2) 다음 코드의 실행 결과는 무엇인가요?

using System;

class SignalLight
{
    static void Main()
    {
        char signalLight = 'A';
        string message = "";

        switch (signalLight)
        {
            case 'R':
                message = "적색: 멈추세요.";
                break;
            case 'Y':
                message = "황색: 주의하세요.";
                break;
            case 'G':
                message = "녹색: 이동하세요.";
                break;
            default:
                message = "신호등 고장";
                break;
        }

        Console.WriteLine(message);
    }
}

a. 적색: 멈추세요.
b. 황색: 주의하세요.
c. 녹색: 이동하세요.
d. 신호등 고장

정답: d

char 변수 signalLight에는 'A'가 저장되어 있습니다. 하지만 switch 문에서는 'R', 'Y', 'G'만 처리하고 있기 때문에, default 레이블이 실행되어 "신호등 고장"이 출력됩니다.


연습문제: switch 문을 사용하여 산술 연산 수행하기

다음 소스 코드를 완성하여 세 줄에 걸쳐 정수, 연산자, 정수를 입력받아 연산 결과를 출력하는 프로그램을 작성하세요.

코드

using System;

class SwitchPractice
{
    static void Main()
    {
        int f = Convert.ToInt32(Console.ReadLine()); // 3
        char o = Convert.ToChar(Console.ReadLine()); // +, -, *
        int s = Convert.ToInt32(Console.ReadLine()); // 5

        switch (o)
        {
            case '+':
                Console.WriteLine($"{f} {o} {s} = {f + s}");
                break;
            case '-':
                Console.WriteLine($"{f} {o} {s} = {f - s}");
                break;
            case '*':
                Console.WriteLine($"{f} {o} {s} = {f * s}");
                break;
            default:
                Console.WriteLine("+, -, *만 사용하세요.");
                break;
        }
    }
}

실행 예시

3
+
5
3 + 5 = 8

정답

[1] case '-':
[2] $"{f} {o} {s} = {f * s}"

해설

  • [1] case 레이블에서는 연산 기호를 문자('-')로 비교해야 합니다.
  • [2] 곱셈(*) 연산의 경우, Console.WriteLine 내부에서 올바르게 문자열을 조합하여 출력해야 합니다.
VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com