과거 switch 문은 break 문을 일일이 적어줘야 했고, 실수로 빠뜨리면 다음 case가 연달아 실행됐다. 자바 21에서는 이를 획기적으로 개선했다.
switch (grade) {
case 'A':
case 'a':
System.out.println("우수 회원");
break;
case 'B':
case 'b':
System.out.println("일반 회원");
break;
default:
System.out.println("손님");
}
-> 를 사용하여 break 없이도 깔끔하게 표현하며, switch의 결과값을 변수에 바로 대입할 수 있다.
String position = "과장";
int bonus = switch (position) {
case "부장" -> 500;
case "과장", "대리" -> 300; // 쉼표(,)로 여러 조건 나열 가능
default -> 100;
};
단순히 값을 비교하는 것을 넘어, 타입(Type)을 검사하고 변수를 즉시 선언할 수 있다.
public static String formatter(Object obj) {
return switch (obj) {
case Integer i -> String.format("정수: %d", i);
case String s -> String.format("문자열: %s", s);
case Double d -> String.format("실수: %f", d);
default -> "알 수 없는 타입";
};
}
when 절패턴 매칭과 함께 조건을 더 세밀하게 제어할 수 있는 when 키워드가 추가됐다. if 문을 중첩해서 쓰지 않아도 되어 가독성이 매우 좋아졌다.
Object obj = "Hello World";
switch (obj) {
case String s when s.length() > 5 -> System.out.println("5글자 초과 문자열");
case String s -> System.out.println("짧은 문자열");
default -> System.out.println("기타");
}
yield 키워드->를 사용하는 방식이 아니라 복잡한 로직(여러 줄의 코드) 처리 후 값을 반환해야 할 때는 yield를 사용한다.
int result = switch (mode) {
case "ADD" -> {
int a = 10;
int b = 20;
yield a + b; // 값을 반환하고 switch 블록 종료
}
default -> 0;
};
switch는 결과를 반환하는 식으로 사용 가능하다.->) 구문을 사용하여 break 누락 실수를 방지하자.