본문 바로가기
Program Language/Java

Java 12 - Switch Expressions

by 준짱IT 2025. 7. 16.

Java12에서 나온 스위치 표현식과 기존 Java 12 이전의 스위치를 정리하여 작성하려 한다.

(정식 채택은 Java 14에서 채택)

 

1. 기존 switch 문 (Java 11까지)

String day = "MONDAY";
int number;

switch (day) {
    case "MONDAY":
        number = 1;
        break;
    case "TUESDAY":
        number = 2;
        break;
    default:
        number = 0;
        break;
}
System.out.println(number);

 

❌ 문제점

  • 코드 중복: break를 매번 써야 함
  • 오류 유발 가능성: break 누락 시 fall-through 발생
  • 할당 흐름이 불분명: number를 switch 외부에서 선언해야 함

✅ 2. 스위치 표현식 (Java 12+)

String day = "MONDAY";
int number = switch (day) {
    case "MONDAY" -> 1;
    case "TUESDAY" -> 2;
    default -> 0;
};
System.out.println(number);

 

또는 여러 case 그룹도 가능

 

int number = switch (day) {
    case "MONDAY", "WEDNESDAY", "FRIDAY" -> 1;
    case "TUESDAY", "THURSDAY" -> 2;
    default -> 0;
};

 

✅ 3. yield를 통해 복잡한 로직 작성 가능

int result = switch (day) {
    case "MONDAY" -> {
        System.out.println("It's Monday!");
        yield 1;  // 여러 줄 블록일 경우 yield로 반환
    }
    default -> 0;
};

 

✅ 4. 주요 차이점 비교표

항목기존 switch 문스위치 표현식 (Java 12+)
반환값 ❌ 없음 ✅ 값을 반환함 (int, String, etc.)
문 vs 표현식 문(statement) 표현식(expression)
break 필요 ✅ 필요 ❌ 불필요 (-> 사용)
fall-through ✅ 기본 동작 ❌ 방지됨
다중 case case A: case B: 형태 case A, B -> 형태로 간결하게 작성 가능
안전성 실수로 fall-through 위험 구조적으로 안전함
복잡한 로직 불편 (중첩, 외부 변수 필요) yield로 블록 처리 가능

'Program Language > Java' 카테고리의 다른 글

Java21 Virtual Thread(가상쓰레드) - 1  (5) 2025.07.22
Java sealed class란?  (1) 2025.07.16
Java record란?  (1) 2025.07.16
Java10의 var 변수란?(Javascript X)  (1) 2025.07.15
자바 최신 버전과 1.8 버전의 차이 정리  (4) 2025.07.15