새로운 switch 문인 Switch Expressions은 더 간결하고 읽기 쉬워졌습니다.

Switch Expressions는 확장일 뿐 대체가 아닙니다.

 


 

break문에 대한 필요성을 제거했고, 코드 실행은 첫 번째 일치 이후에 일어나지 않습니다.

 

또 다른 주목할만한 차이점은 switch 문을 변수에 직접 할당할 수 있다는 점입니다.

값은 반환하지 않고 스위치 표현식에서 코드를 실행할 수 있습니다.

 

기존의 switch 문을 살펴 보겠습니다.

@Log4j2
public class SwitchExpressionEx {
	
	
	// JDK14에서 공식으로 나온 Switch Expression
    
	public static void main(String[] args) {
		int number = 3;
		
		log.trace("main({}) invoked.", Arrays.toString(args));
		
		// 기존 swtich 문
		String day = "TUESDAY";
		boolean isTodayHoliday;
		
		switch(day){
			case "MONDAY":
			case "TUESDAY":
			case "WEDNESDAY":
			case "THUSDAY":
			case "FRIDAY":		isTodayHoliday = false; break;
			case "SATURDAY":	
			case "SUNDAY":		isTodayHoliday = true; break;
			
			default: throw new IllegalArgumentException(day); // 예외처리
		}
		
		log.info("\t + day : {}, isTodayHoliday: {}", day, isTodayHoliday);
		
		// =============================================================
		
        
        // Invalid expression zs statment => 값 반환 시, Lvalue 생략이 불가능
        // Duplicate case(중복된 케이스)는 허용되지 않음
		isTodayHoliday = switch(day) {
			// 아래의 값중 하나라도 해당이 된다면 false 또는 true를 반환
			case "MONDAY", "TUESDAY", "WEDNESDAY", "THUSDAY", "FRIDAY" -> false;
			case "SATURDAY", "SUNDAY" -> true;
			default -> throw new IllegalArgumentException();
		}; // switch expression

 

위 처럼 기존의 switch 문은 값을 반환할 수 없었습니다.

 

주석 구별선 아래는 JAVA 14부터 새롭게 배포된 switch expression 코드입니다.

switch expression은 boolean에 값의 반환이 가능하고,

switch 중괄호에 마지막에 세미콜론(;)으로 마무리합니다.

 

여기서 중요한 점은

새로운 switch expression 에서는 default 생략이 불가능합니다.

또한 값을 반환받는 Lvalue(isTodayHoliday) 생략이 불가능합니다.

 

 

 

또한, 기존의 switch 문과 혼용이 가능합니다.

int value = 1000;
		
		switch(value) {
			case 100 -> {
				log.info("case100");
				log.info("Hello, World");
			} // 100
			
			case 200 -> {
				log.info(value);
			} // 200
			
			case 300 -> {;;} // 결정된 코드가 없으면 중괄호 안 세미콜론으로 구분
			
			default -> {
				log.info("default");
				
				throw new IllegalArgumentException("Unknown Value : " + value);
			} // default
		} // switch expression

 

기존의 switch 문처럼 실행문장을 실행시키는 용도로만 사용한다면, default 생략이 가능합니다.

 

기존의 switch문처럼 열거상수도 사용이 가능합니다.

 

// 열거 타입(enum type)
enum Week{
	// 열거상수
	MON,
	TUE,
	WED,
	THU,
	FRI,
	SAT,
	SUN
}


// =============================================================

Week today = Week.FRI; // 열거 타입 변수에, 열거 상수 Week.FRI로 초기화
		switch(today) {
			case FRI -> log.info(today);
		}

 

switch 문이든 switch Expression이든, case에 열거상수 지정 방법은 같습니다.

 

 

 

'Java' 카테고리의 다른 글

인터페이스  (0) 2023.07.25
Getter Setter  (0) 2023.07.21
생성자  (0) 2023.07.19
args  (0) 2023.07.18
제곱근 필터링  (0) 2023.07.15

+ Recent posts