[Java] switch 문 최신 문법까지 정리해보기 (Java 14+)

2025. 7. 29. 18:11·Backend/Java

 

Java의 switch 문은 특정 변수의 값에 따라 다른 코드를 실행할 때
if-else 문보다 코드를 훨씬 깔끔하게 만들어주는 제어문입니다.
Java 버전이 올라가면서 switch는 더 안전하고 강력하게 발전했습니다. 핵심만 빠르게 알아보겠습니다.

 


 

1️⃣ 일반적인 switch문 (Java 11 이전)

가장 전통적인 형태로, case, break, default 키워드를 사용합니다.

 

  1. 변수 값이 case와 일치하면 해당 지점부터 코드를 실행합니다.

  2. break를 만나야 switch 문을 탈출합니다.
    만약 break를 생략하면, 다음 case의 코드가 멈추지 않고 실행되는 "Fall-through"가 발생합니다.

  3. Fall-through를 의도적으로 사용하여 여러 case에 대해 동일한 코드를 실행할 수 있습니다.
// 예시: Fall-through를 이용해 여러 case 처리
int day = 3;
String type = "";

switch (day) {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        type = "평일";
        break; // break가 없으면 아래 case 6으로 넘어감
    case 6:
    case 7:
        type = "주말";
        break;
    default:
        type = "알 수 없음";
        break;
}
// type은 "평일"
Fall-through(폴스루) 는 switch 문에서 break를 만나기 전까지, 일치하는 case 지점부터
아래로 멈추지 않고 코드를 계속 실행하는 switch의 고유한 동작 방식을 의미합니다.

 

💡자주 하는 오해: switch는 어떻게 case를 찾을까요?

"만약 case 1: case 2: case 3:이 있고 입력값이 2라면,
case 1이 아니니까 통과되어 case 2에 도달하지 못하는 게 아닌가?" 하는 오해가 있을 수 있습니다.

 

switch는 위에서부터 순서대로 검사하지 않습니다.
switch는 입력값을 확인한 후, 그 값과 일치하는 case 라벨로 직접 점프합니다.

int day = 2;
String type = "";

switch (day) { // day는 2
    case 1: 
    case 2: // case 2에 바로 도착! 이후 break 가 없으니 쭉쭉 내려간다
    case 3:
        type = "평일";
        break; // break를 만나 switch 문 탈출
    case 4:
    case 5:
        type = "주말";
        break;
}

// 최종적으로 type은 "평일"이 됩니다
switch(n)은 처음부터 case n 이라는 표지판을 찾아 바로 이동합니다.
그리고 그곳에 break가 없으면 다음 break가 나올 때까지 멈추지 않고 아래로 내려가는 것입니다.

2️⃣ 개선된 switch문 (Java 14+)

 

Java 14부터는 기존 switch의 단점을 보완하고 가독성을 높인 새로운 문법이 도입되었습니다.

① 쉼표(,)로 case 묶기

Fall-through 방식보다 의도가 명확하고 코드가 훨씬 깔끔해집니다.

switch (day) {
    case 1, 2, 3, 4, 5: // 쉼표로 여러 조건을 한 번에 묶음
        type = "평일";
        break;
    case 6, 7:
        type = "주말";
        break;
    default:
        type = "알 수 없음";
        break;
}

 

② 화살표(->)와 switch 표현식

가장 큰 변화로, switch가 값을 반환하는 표현식(Expression)으로도 사용될 수 있습니다.

  • 화살표(->): break가 필요 없습니다. 화살표 오른쪽의 코드만 실행하고 switch가 자동으로 종료됩니다.
  • 값 반환: switch의 결과 자체를 변수에 바로 할당할 수 있어 코드가 매우 간결해집니다.
// 예시: switch 표현식을 사용해 바로 변수에 값을 할당
String type = switch (day) {
    case 1, 2, 3, 4, 5 -> "평일";
    case 6, 7 -> "주말";
    default -> "알 수 없음";
}; // 표현식의 끝은 세미콜론(;)으로 마무리

 

③ 복잡한 로직과 yield

화살표(->) 뒤에 한 줄 이상의 복잡한 로직이 필요할 때, {} 블록 안에서 yield 키워드로 값을 반환합니다.

String type = switch (day) {
    case 1, 2, 3, 4, 5 -> "평일";
    case 6, 7 -> {
        System.out.println("주말입니다!");
        yield "주말"; // 이 블록의 최종 반환 값은 "주말"
    }
    default -> "알 수 없음";
};

핵심 요약

구분  switch문 개선된 switch문 (Java 14+)
역할 문장 (Statement) 문장(Statement) + 표현식(Expression)
여러 case 처리 case 1: case 2: (Fall-through) case 1, 2, 3: (쉼표로 묶음)
break 필요성 필수 불필요 (-> 사용 시)
값 반환 불가능 가능 (-> 또는 yield 사용)

 

'Backend > Java' 카테고리의 다른 글

[Java] 자바 정규 표현식(Regular Expression) 정리  (1) 2025.08.05
[Java] replace()와 replaceAll()의 차이점  (0) 2025.07.22
[Java] 약수의 개수를 구하는 효율적인 알고리즘 정리  (0) 2025.07.16
[Java] 배열 복사 메서드 간단 정리  (0) 2025.07.15
[Java, String] split() 메서드 정리 - 문자열 자르기  (0) 2025.07.13
'Backend/Java' 카테고리의 다른 글
  • [Java] 자바 정규 표현식(Regular Expression) 정리
  • [Java] replace()와 replaceAll()의 차이점
  • [Java] 약수의 개수를 구하는 효율적인 알고리즘 정리
  • [Java] 배열 복사 메서드 간단 정리
devoks
devoks
꾸준히 작성해보자!
  • devoks
    ok's 개발 블로그
    devoks
  • 전체
    오늘
    어제
    • 분류 전체보기 (112) N
      • Backend (15)
        • SpringBoot (0)
        • Java (15)
      • Cs (18) N
      • Infra (0)
        • AWS (0)
        • Docker (0)
      • CodingTest (79)
        • Programmers (79)
  • 링크

    • My GitHub
  • 인기 글

  • 태그

    BufferedReader
    CS
    StringTokenizer
    effectivejava
    switch
    codingtest
    json
    programmers
    java
    BufferedWriter
  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
devoks
[Java] switch 문 최신 문법까지 정리해보기 (Java 14+)
상단으로

티스토리툴바