개발 ━━━━━/Java

[Java] 개선된 Switch 문 (Enhanced Switch Expressions)

GukJang 2024. 8. 1. 23:26
반응형

Java 14 Switch Expressions

기존 C 나 Java 에서 사용하던 Switch 문은 if-else 문을 놔두고 굳이 쓸만한 이유를 딱히 찾지 못했기 때문에 거의 사용하지 않던 문법이다.
하지만 Java 14 이후로 개선된 Switch 문이 도입되었고 아래와 같은 feature 들이 추가되었다.

  • Arrow Labels
  • Switch expressions
  • Yielding a value

 

Arrow Labels

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

 

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

 
-> 로 매우 간편하게 표현이 가능하다.
 

Switch Expressions

  • before
import static java.util.Calendar.*;

public class Switch2 {
    public static void main(String[] args) {
        int day = 1;
        int numCnt;
        switch (day) {
            case MONDAY:
            case FRIDAY:
            case SUNDAY:
                numCnt = 6;
                break;
            case TUESDAY:
                numCnt = 7;
                break;
            case THURSDAY:
            case SATURDAY:
                numCnt = 8;
                break;
            case WEDNESDAY:
                numCnt = 9;
                break;
            default:
                numCnt = -1;
        }
        System.out.println(numCnt);
    }
}

 

  • after
import static java.util.Calendar.*;

public class Switch2 {
    public static void main(String[] args) {
        int day = 1;
        int numCnt = switch (day) {
            case MONDAY, FRIDAY, SUNDAY	-> 6;
            case TUESDAY				-> 7;
            case THURSDAY, SATURDAY		-> 8;
            case WEDNESDAY				-> 9;
            default -> -1;
        };
        System.out.println(numCnt);
    }
}

 
기존에는 변수 = ? 의 식이 계속 중복되어 사용되었는데
변수를 선언하고 switch 문의 값을 바로 변수에 대입을 할 수 있게 개선되어 불필요한 중복문을 없앨 수 있다.
 

Yielding a value

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

 

  • after
import static java.util.Calendar.*;

public class Switch3 {
    public static void main(String[] args) {
        Integer day = 1000;
        int numCnt = switch (day) {
            case MONDAY, FRIDAY, SUNDAY -> 6;
            case TUESDAY -> 7;
            case THURSDAY, SATURDAY -> 8;
            case WEDNESDAY -> 9;
            default -> {
                int result = day.toString().length();
                yield result;
            }
        };
        System.out.println(numCnt);
    }
}

 
yield 키워드를 사용하여 switch 문 안에서 선언된 또 다른 변수 (result) 를 numCnt 에 대입시키는 기능을 한다.
 


 
기존 switch 문에 비해 여러 요소들이 추가되어 코드의 가독성을 높이고 복잡한 조건문을 보다 명확하게 작성할 수 있게 된 것 같다.
 
 
 

참고

https://openjdk.org/jeps/361

반응형