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 |