본문 바로가기
Language/Java

Java 14 - 새로운 switch문(switch expression)

by 클레어몬트 2024. 7. 28.

기존의 switch문에 대한 개발자들의 불만이 많았다 switch문을 사용하는 이유에 가장 큰 이유는 가독성이지만, switch문은 가독성이 그닥 좋지 않은 데다가 코드줄만 더 잡아먹었다

2020년 Java 14에서 도입된 새로운 switch 문은 더 간결하고 표현력이 뛰어나게 만들기 위해 설계되었다 이 새로운 switch 문은 "switch expression"이라고도 불리며, 실제 현업에서도 종종 사용되니 잘 알아두자

 

기존의 switch 문과 다른 주요 특징은 다음과 같다

1. 표현식으로 사용 가능

새로운 switch 문은 값으로 평가될 수 있다. 즉, 변수에 결과를 할당할 수가 있다.

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

 

 

2. 화살표(->) 문법 사용

화살표 문법을 사용하여 각 case를 더 간단하게 표현할 수 있게 됐다.

switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
    case TUESDAY -> System.out.println(7);
    case THURSDAY, SATURDAY -> System.out.println(8);
    case WEDNESDAY -> System.out.println(9);
    default -> System.out.println("Invalid day");
}

 

 

3. 블록 사용 가능

각 case에 여러 줄의 코드가 필요할 때는 중괄호({})를 사용하여 블록을 만들 수 있다.

int result = switch (operation) {
    case "ADD" -> {
        int sum = a + b;
        yield sum;
    }
    case "SUBTRACT" -> {
        int difference = a - b;
        yield difference;
    }
    default -> throw new IllegalArgumentException("Unknown operation: " + operation);
};

 

블록 내에서는 yield 키워드를 사용하여 값을 반환한다.

 

 

4. 중복된 case 레이블

기존 switch 문에서도 가능한 중복된 case 레이블을 더 쉽게 표현할 수 있다.

switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> System.out.println("6 letters");
    case TUESDAY -> System.out.println("7 letters");
    case THURSDAY, SATURDAY -> System.out.println("8 letters");
    case WEDNESDAY -> System.out.println("9 letters");
    default -> System.out.println("Invalid day");
}

 

 

새로운 switch 문에서는 모든 가능한 값을 처리하지 않는 경우 default 문을 반드시 포함해야 한다.