JAVA
switch 추가된 문법
devstep88
2023. 8. 6. 01:42
jdk 14에 추가된 문법
- 기존의 case ... :를 대체하는 case ... -> 를 사용하여 불필요하게 장황한 코드를 개선할 수 있다.
// 기존
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;
}
// JDK 14
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);
}
case L1, L2 ... -> 에서 n개의 label을 동시에 작성할 수 있다.
화살표 뒤에 단일 명령문만 작성하는 경우 break; 를 제외해도 해당 블럭의 내용만 출력되나, 여러 명령문을 작성하는 경우 break; 가 필요하다.
switch (day) {
case FRIDAY: System.out.println("is"); System.out.println("friday"); break;
default: System.out.println("default");
}
/*
is
friday
*/
switch (day) {
case FRIDAY: System.out.println("is"); System.out.println("friday");
default: System.out.println("default");
}
/*
is
friday
default
*/
상수값 리턴
기존에 case 블럭 내에서 외부에서 선언된 변수에 값을 대입하는 로직대신, 직접 상수값을 리턴하도록 작성 할 수 있다.
Day day = Day.FRIDAY;
int numLetters = switch (day) {
case MONDAY, FRIDAY, SUNDAY -> 6;
case TUESDAY -> 7;
case THURSDAY, SATURDAY -> 8;
case WEDNESDAY -> 9;
};
System.out.println(numLetters); // 6
yield value; 는 Java 12에서 제공한 break value;와 동일한 기능이다. 단, 블럭 {} 내에서만 유효하다.
전체 블럭이 필요하면(case 내부에서 처리되어야하는 로직이 있는 경우) yield 문을 사용하여 리턴 값을 반환할 수 있다.
public static int doubleFunc(int k) {
return k * 2;
}
public static void main(String[] args) {
int j = switch (day) {
case MONDAY -> 0;
case TUESDAY -> 1;
// case SUNDAY -> yield 2; [error] yield 키워드는 블럭 내에서만 유효하다.
default -> {
int k = day.toString().length();
int result = doubleFunc(k);
yield result;
}
};
System.out.println(j); // 12
}
기존 형식에서도 yield 문을 사용해 다음과 같이 처리 가능하다.
int j = switch (day) {
case MONDAY:
yield 0; // case .. : 를 사용하는 경우 이와 같이 모든 case에 대해 yield가 필요하다.
case TUESDAY:
yield 1;
default:
int k = day.toString().length();
int result = doubleFunc(k);
yield result;
};
System.out.println(j);