CodeGym /행동 /JAVA 25 SELF /클래식 switch: 문법과 예제

클래식 switch: 문법과 예제

JAVA 25 SELF
레벨 10 , 레슨 3
사용 가능

1. 소개

상황을 상상해 봅시다. 당신은 카페용 프로그램을 작성하고 있습니다. 사용자가 음료를 선택하면 그 선택에 따라 반응해야 합니다. 물론 if-else if-else를 잔뜩 사용할 수도 있지만, 보기가 썩 좋진 않죠:

if (choice == 1) 
{
    System.out.println("에스프레소를 선택하셨습니다.");
} 
else if (choice == 2) 
{
    System.out.println("카푸치노를 선택하셨습니다.");
} 
else if (choice == 3) 
{
    System.out.println("라떼를 선택하셨습니다.");
} 
else 
{
    System.out.println("해당하는 음료가 없습니다.");
}

동의하신다면, 이것은 너무 장황합니다. 선택지가 10개나 20개라면 어떨까요? 이럴 때 switch 문이 도움을 줍니다. 변수의 값에 따라 많은 선택지 중 하나를 우아하고 간결하게 처리할 수 있게 해줍니다.

클래식 switch의 문법

switch의 Java 문법은 다음과 같습니다:


switch (vyrazhenie) 
{
    case znachenie1:
        // 표현식이 znachenie1과 같다면 수행할 동작
        break;
    case znachenie2:
        // 표현식이 znachenie2와 같다면 수행할 동작
        break;
    ...
    default:
        // 어떤 case와도 일치하지 않으면 수행할 동작
        break;
}
Java의 switch 문법

핵심 요소:

  • switch (표현식) — 표현식의 결과를 각 case와 비교합니다.
  • case : — 표현식과 비교될 분기 값입니다.
  • break;switch 블록의 실행을 종료합니다(없으면 다음 case로 “폴스루”).
  • default: — 어떤 case와도 일치하지 않을 때 실행됩니다.

2. switch 사용 예시

예제 1: 정석 — 음료 선택

카페 메뉴를 구현해 봅시다:

import java.util.Scanner;

public class CoffeeShop 
{
    public static void main(String[] args) 
    {
        Scanner console = new Scanner(System.in);

        System.out.println("음료를 선택하세요:");
        System.out.println("1 - 에스프레소");
        System.out.println("2 - 카푸치노");
        System.out.println("3 - 라떼");
        int choice = console.nextInt();

        switch (choice) 
        {
            case 1:
                System.out.println("에스프레소를 선택하셨습니다.");
                break;
            case 2:
                System.out.println("카푸치노를 선택하셨습니다.");
                break;
            case 3:
                System.out.println("라떼를 선택하셨습니다.");
                break;
            default:
                System.out.println("해당하는 음료가 없습니다.");
                break;
        }
    }
}

무슨 일이 일어나나요:

  • 사용자가 음료 번호를 입력합니다.
  • choice 변수의 값이 각 case와 비교됩니다.
  • 일치하면 해당 블록이 실행되고, 이어서 breakswitch 실행을 종료합니다.
  • 어느 것과도 일치하지 않으면 default가 실행됩니다.

예제 2: 문자열로 전환하기

switch에서 사용할 수 있는 타입은 많지 않지만, 문자열은 가능합니다! 명령형 메뉴에 유용합니다:

import java.util.Scanner;

public class CommandMenu 
{
    public static void main(String[] args) 
    {
        Scanner console = new Scanner(System.in);

        System.out.println("명령을 입력하세요 (start, stop, pause):");
        String command = console.nextLine();

        switch (command) 
        {
            case "start":
                System.out.println("프로그램을 시작합니다!");
                break;
            case "stop":
                System.out.println("프로그램을 중지합니다.");
                break;
            case "pause":
                System.out.println("일시 정지.");
                break;
            default:
                System.out.println("알 수 없는 명령입니다.");
                break;
        }
    }
}

주의: switch에서의 문자열 비교는 대소문자를 구분합니다! "Start""start"는 서로 다른 문자열입니다.

3. 클래식 switch가 지원하는 타입은?

클래식 switch에서는 다음 타입만 사용할 수 있습니다:

  • 원시 정수형: byte, short, char, int
  • 열거형: enum (자세한 내용은 다음 강의에서 다룹니다)
  • 문자열: String — 대소문자를 구분하여 비교

사용할 수 없음: boolean, float, double, 배열, 임의의 클래스 객체(enumString 제외).

char 예제

char grade = 'B';

switch (grade) 
{
    case 'A':
        System.out.println("매우 좋음!");
        break;
    case 'B':
        System.out.println("좋음.");
        break;
    case 'C':
        System.out.println("보통.");
        break;
    default:
        System.out.println("다시 시도하세요.");
        break;
}

4. break의 필수성: 잊으면 어떻게 될까?

초보자의 가장 흔한 실수 — break;를 빼먹는 것입니다. 무엇이 일어나는지 살펴봅시다:

int day = 2;

switch (day) 
{
    case 1:
        System.out.println("월요일");
        break;
    case 2:
        System.out.println("화요일");
    case 3:
        System.out.println("수요일");
        break;
    default:
        System.out.println("알 수 없는 요일");
        break;
}

결과:

화요일
수요일

왜일까요? case 2 뒤에 break가 없기 때문에 실행이 다음 case로 “폴스루”되기 때문입니다(이를 fall-through라고 합니다). 때로는 유용하지만, 대부분의 경우엔 실수입니다.

5. case 묶기: 여러 값이 동일하게 동작할 때

여러 값에 대해 동일한 동작이 필요하다면, 값을 연달아 나열할 수 있습니다:

int month = 1;

switch (month) 
{
    case 12:
    case 1:
    case 2:
        System.out.println("겨울");
        break;
    case 3:
    case 4:
    case 5:
        System.out.println("봄");
        break;
    case 6:
    case 7:
    case 8:
        System.out.println("여름");
        break;
    case 9:
    case 10:
    case 11:
        System.out.println("가을");
        break;
    default:
        System.out.println("알 수 없는 월");
        break;
}

설명: month12, 1, 2 중 하나라면 프로그램은 "겨울"을 출력합니다.

6. 비교: switch vs if-else

시나리오 if-else switch
선택지가 많음 긴 체인으로 가독성 떨어짐 간결하며 모든 선택지가 한눈에 보임
범위 비교 사용 가능 (if (x > 5 && x < 10)) 불가, 특정 값만 가능
지원 타입 제한 없음 일부만 (위 참조)
break 관련 함정 아니오 예, 반드시 break를 확인해야 함

7. switch 사용 시 흔한 실수

오류 1: break를 잊음
가장 흔한 버그의 원인입니다. break를 빼먹으면 기대하지 않은 case까지 코드가 실행됩니다.

오류 2: 지원되지 않는 타입 사용
double, float, boolean을 사용하려 하면 컴파일러가 “불가”라고 합니다.

오류 3: 대소문자가 다른 문자열
사용자가 "Start"를 입력했는데, 여러분은 "start"를 기대했다면 switch는 동작하지 않습니다. 미리 문자열을 한 가지 케이스로 맞추는 것이 좋습니다:

switch (command.toLowerCase()) 
{
    case "start":
        // ...
}

오류 4: case에 변수를 사용함 (상수만 가능)
case에서는 상수만 허용됩니다. 변수를 사용하면 컴파일 오류가 발생합니다.

오류 5: 중복된 case
동일한 값의 case가 두 개 이상이면 컴파일 오류가 발생합니다.

1
과제
JAVA 25 SELF, 레벨 10, 레슨 3
잠금
스마트 오피스: 요일 판별 📅
스마트 오피스: 요일 판별 📅
1
과제
JAVA 25 SELF, 레벨 10, 레슨 3
잠금
로봇 제어판 🤖
로봇 제어판 🤖
1
과제
JAVA 25 SELF, 레벨 10, 레슨 3
잠금
시즌별 월 가이드 🍂
시즌별 월 가이드 🍂
1
과제
JAVA 25 SELF, 레벨 10, 레슨 3
잠금
포켓 계산기 ➕
포켓 계산기 ➕
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION