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

2024. 8. 1. 23:26·개발 ━━━━━/Java
반응형

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

반응형

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

[Java] Input 값 입력 받는 방법 ② - BufferedReader 클래스  (0) 2024.03.05
[Java] 배열 값 출력하기  (0) 2023.08.27
[Java] 문자열 배열에 String 집어 넣기  (0) 2023.08.25
[Java] String <-> Int 형변환  (0) 2023.08.25
[Java/Algorithm] List 오름차순  (0) 2023.08.24
'개발 ━━━━━/Java' 카테고리의 다른 글
  • [Java] Input 값 입력 받는 방법 ② - BufferedReader 클래스
  • [Java] 배열 값 출력하기
  • [Java] 문자열 배열에 String 집어 넣기
  • [Java] String <-> Int 형변환
GukJang
GukJang
•  ⌘ ⌥ •
    반응형
  • GukJang
    SPACE
    GukJang
  • 전체
    오늘
    어제
    • Blog (73)
      • 개발 ━━━━━ (68)
        • Java (14)
        • C++ (1)
        • HTML (1)
        • Spring(boot) (7)
        • Dev (9)
        • SQL (1)
        • CS (2)
        • Git (1)
        • Troubleshoot (14)
        • Algorithm (2)
        • Definition (1)
        • Dev Life (2)
        • TIL (7)
        • 항해 (6)
      • 공돌 ━━━━━ (4)
        • 플젝 (2)
        • 장비 (1)
        • 부품 (1)
      • 독서 ━━━━━ (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    마이크로파이썬
    자바
    micropython
    CI CD
    github actions
    알고리즘
    백준
    Python
    EC2
    docker volume
    항해99
    docker
    SpringBoot
    electron-builder
    사전 스터디
    Java
    AWS
    spring
    오픈소스 기여
    mysql
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
GukJang
[Java] 개선된 Switch 문 (Enhanced Switch Expressions)
상단으로

티스토리툴바