[Java] Switch Expression

윤석진·2021년 11월 23일
0
post-thumbnail

🕹 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 표현식을 사용했다.

profile
공부하며 쓰는 블로그

0개의 댓글