개발/TIL

java 개선된 switch 문 사용하기

ebang 2025. 3. 1. 22:30

 

사실 나온 지는 꽤 되었지만, 바보처럼 실수한 적도 있고 해서 정리해본다. 

Java 14부터 사용할 수 있게 되었고, 중괄호 없이 바로 사용할 수 있다는 게 장점이다. 

중괄호를 사용할 경우에는 break 문을 반드시 써줘야 한다. 

 

이 switch 문은 기본적으로 다음과 같은 문법을 따른다. 

화살표 다음의 문장을 실행하거나 값을 반환하되, 다른 화살표의 내용은 실행하지 않는다는 것이 특징이다. 

case label_1, label_2, ..., label_n -> expression;|throw-statement;|block

 

public class NewSwitchExample {
    public static String numToString(int number) {
		return switch (number) {
            case 1 -> "One";
            case 2 -> "Two";
            case 3 -> "Three";
            default -> "Other";
        };
    }
}

 

다음 처럼 여러 조건을 묶어서 연산하는 것도 가능해서, 가독성에 매우 큰 도움이 된다. 

int dayNumber = switch (day) {
    case "Monday", "Wednesday", "Friday" -> 1;
    case "Tuesday", "Thursday", "Saturday" -> 2;
    default -> 0;
};

 

 

위의 상황과 다르게 중괄호를 사용한다면, 명식적으로 break 혹은 yield 를 작성해야 한다. 

그렇지 않으면 의도치 않게 동작할 수 있다. 

yield 는 Java SE13에서 등장한 것으로, 이를 사용하는 경우 switch 구문의 결과를 반환할 수 있다. 

switch 표현식에서 return 문을 사용할 수 없기 때문에 등장한 대용품이라고 생각하면 된다. 

    int numLetters = switch (day) {
        case MONDAY, FRIDAY, SUNDAY -> {
            System.out.println(6);
            yield 6;
        }
        case TUESDAY -> {
            System.out.println(7);
            yield 7;
        }
        case THURSDAY, SATURDAY -> {
            System.out.println(8);
            yield 8;
        }
        case WEDNESDAY -> {
            System.out.println(9);
            yield 9;
        }
        default -> {
            throw new IllegalStateException("Invalid day: " + day);
        }
    };

 

 

 

자세한 해설을 보려면 공식문서를 참고해보자!

https://docs.oracle.com/en/java/javase/13/language/switch-expressions.html

'개발 > TIL' 카테고리의 다른 글

[Sql 튜닝] SQL 처리과정과 IO  (1) 2025.03.03
Validation과 Exception Handling  (2) 2025.03.01
spring webflux 에 대한 개요  (0) 2025.02.27
kubernetes에서 yml 로 pod 관리하기  (0) 2025.02.26
java record 알차게 사용하기  (0) 2025.02.25