본문 바로가기
자바/개념

[Java] 향상된 switch문 (jdk 14버전 이상부터)

by drCode 2025. 3. 26.
728x90
반응형

https://docs.oracle.com/en/java/javase/14/language/switch-expressions.html

 

자바를 처음 배울 때, 내가 알던 자바의 switch 문은 아래와 같은 형식이었다.

String str = "Mon";
String day = "";

switch(str) {
	case "Mon" : 
    	day = "월요일";
        break;
	case "Tue" : 
    	day = "화요일";
        break;
    case "Wed" : 
    	day = "수요일";
        break;
    case "Thu" : 
    	day = "목요일";
        break;
    case "Fri" : 
    	day = "금요일";
        break;
    case "Sat" : 
    	day = "토요일";
        break;
    default : 
    	day = "일요일";
        break;
}

System.out.println(day); // 월요일

 

그런데 자바 14번 버전부터 break; 문을 쓰지 않아도 된다.

 

그러면 중간에 조건문 이탈을 어떻게 해야하는가?

 

없어졌다. -> 화살표를 쓰면 끝이다.

 

이제는 위의 문장이 아래처럼 바뀐다.

String str = "Mon";
String day = "";

switch(str) {
    case "Mon" -> day = "월요일";
    case "Tue" -> day = "화요일";
    case "Wed" -> day = "수요일";
    case "Thu" -> day = "목요일";
    case "Fri" -> day = "금요일";
    case "Sat" -> day = "토요일";
    default -> day = "일요일";
}

System.out.println(day); // 월요일

 

이렇게 간단하게 바뀌었다.

 

그리고 기존에 case 레이블을 연달아 쓸 때는

int day = 3;
String dayType = ""; 
switch (day) {
    case 1 : 
    case 2 : 
    case 3 :
    case 4 : 
    case 5 :
        dayType = "평일";
        break;
    case 6 :
    case 7 : 
        dayType = "주말";
        break;
    default : 
        dayType = "잘못된 요일";
};
System.out.println(dayType); // 출력: 평일

 

위처럼 사용했었는데, 이제는 아래와 같이 쉼표로 구분하여 간편하게 사용할 수 있게 되었다.

int day = 3;
String dayType = switch (day) {
    case 1, 2, 3, 4, 5 -> "평일";
    case 6, 7 -> "주말";
    default -> "잘못된 요일";
};
System.out.println(dayType); // 출력: 평일

 

그리고 변수에 바로 String A = switch(조건변수) { } 이런 식으로 데이터 대입이 가능하다.

 

그리고 아래의 구문을 보면 그동안 보지 못했던 것이 나온다

int score = 85;
String grade = switch (score) {
    case 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100 -> {
        System.out.println("최고 점수입니다.");
        yield "A";
    }
    case 80, 81, 82, 83, 84, 85, 86, 87, 88, 89 -> "B";
    case 70, 71, 72, 73, 74, 75, 76, 77, 78, 79 -> "C";
    default -> "F";
};
System.out.println(grade); // 출력: B

 

yield? 새로 생긴 예약어인데, switch 문의 결과값을 저장하는 역할을 한다.

 

grade = "A"; 이렇게 저장한 내용은 없다.

근데 yield "A"; 이렇게 함으로써 grade 변수에 자동으로 "A" 가 대입된다.

 

그리고 기존 스타일의 구문과 신규 스타일의 구문 혼용이 가능하다.

int value = 2;
String result = switch (value) {
    case 1:
        yield "one";
    case 2:
        yield "two";
    default:
        yield "other";
};
System.out.println(result); // 출력: two

 

콜론(:)도 사용 가능하고, 표현식으로(변수에 바로 값을 대입할 수 있는 형태로) 사용이 가능하지만, 

웬만하면 -> 화살표를 써서 처리하는 것이 더 깔끔해 보인다.

( 화살표가 더 직관적인 느낌..?)

 

그래서 핵심적인 내용을 요약하면 아래와 같다.

  • switch 문이 표현식으로 사용 가능해져 결과를 변수에 할당하거나 다른 표현식에 사용할 수 있다.
  • case 레이블에 화살표(->)를 사용하여 코드를 간결하게 만들고, break 문을 생략할 수 있다.
  • 하나의 case 레이블에 여러 값을 쉼표(,)로 구분하여 지정할 수 있다.
  • switch 표현식에서 값을 반환할 때는 yield 키워드를 사용합니다.

 

이렇게 미루어 볼 때, 스위치문이 간편해짐으로써 좀 더 직관적이고 간결한 프로그래밍을 할 수 있게 되었다.

 

 

728x90
반응형

댓글