본문 바로가기

프로그래밍/Java

[Java] Switch Expression

2021년 11월 23일에 작성된 글입니다.

🕹 Switch Expression

switch를 명령문(statement) 뿐만 아니라 표현식(expression)으로도 사용할 수 있도록 확장

JDK 12, 13에서 preview, JDK 14에서 standard로 제공된다.
JEP 361 Switch Expressions

코드로 비교해보자

Before

switch (day) {
    case MONDAY:
    case FRIDAY:
    case SUNDAY:
        System.out.println(6);
        break;
    case TUESDAY:
        System.out.println(7);
        break;
    case THURSDAY:
    case SATURDAY:
        System.out.println(8);
        break;
    case WEDNESDAY:
        System.out.println(9);
        break;
}

(MONDAY, FRIDAY, SUNDAY)와 (THURSDAY, SATURDAY)는 동일한 처리를 하기 위해 연속적으로 위치하고 있다.
중복된 코드(case, break, System.out.println)가 발생한다.

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

numLetters 변수를 먼저 선언해놓고, switch 문에서 값을 할당하고 있다.

After

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);
}

같은 처리를 하는 (MONDAY, FRIDAY, SUNDAY)와 (THURSDAY, SATURDAY)를 하나로 묶었다.
break를 이용해 구분하지 않고, ->를 이용해 각 조건에 해당하는 코드를 작성한다.

int numLetters = switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> 6;
    case TUESDAY                -> 7;
    case THURSDAY, SATURDAY     -> 8;
    case WEDNESDAY              -> 9;
};

numLetters 변수를 선언하면서 switch 표현식을 이용해 초기화했다.

Final

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

System.out.println 메서드 내에서 switch 표현식을 사용했다.

'프로그래밍 > Java' 카테고리의 다른 글

[Java] JDK 버전별 차이점 정리 (1.5~17)  (5) 2024.09.04
[Java] Pattern Matching for instanceof  (0) 2024.09.04
[Java] 레코드(Record)  (0) 2024.09.04