[JAVA] 자바 17 특징 - Switch 문
자바 17에서는 Switch 문의 기능이 개선되었다. 향상된 Switch 문을 사용하면 break 문을 사용하거나 여러 개의 case를 묶을 때 자바 11 이전의 버전보다 편리하게 사용할 수 있다.
1. 자바 11 이전의 switch ~ case 문
@Test
public void oldStyleSwitchExpression() {
int result ;
Month month = FEBRUARY;//
switch(month) {
case JANUARY :
case JUNE :
case JULY :
result = 3;
break;
case FEBRUARY:
case SEPTEMBER:
case OCTOBER:
case NOVEMBER:
case DECEMBER:
result = 1;
break;
case MARCH:
case MAY:
case APRIL:
case AUGUST:
result = 2;
break;
default :
result = 0;
}
Assertions.assertEquals(1, result);
}
2. Switch문 Return
- swtich 문의 결과를 변수에 저장할 수 있으며 람다식을 사용할 수 있다. 여러 개의 case를 구분해야 하는 경우에도 마(,)로 간결하게 표현이 가능하기 때문 코드 가독성이 개선되었다.
@Test
public void newSwitchExpressionReturnToValue() {
Month month = FEBRUARY;//
var result1 = switch (month) {
case JANUARY, JUNE, JULY -> 3;
case FEBRUARY, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER -> 1;
case MARCH, MAY, APRIL, AUGUST -> 2;
default -> 0;
};
Assertions.assertEquals(1, result1);
}
- swtich 문 내에서 결과를 바로 리턴할 수도 있으며 이런 경우 중괄호를 사용해야 한다.
@Test
public int newSwitchExpressionReturnMethod() {
Month month = FEBRUARY;
switch (month) {
case JANUARY, JUNE, JULY -> { return 3;}
case FEBRUARY, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER -> { return 1;}
case MARCH, MAY, APRIL, AUGUST -> { return 2;}
default -> { return 0;}
}
}
3. yield 키워드
- switch 문의 결과를 변수에 담고 싶은데 여러 줄의 코드를 작성해야 하는 경우 중괄호를 사용하고 return 대신 yield 키워드를 사용하여 값을 반환할 수 있다.
@Test
public void newSwitchExpressionYield() {
Month month = MARCH;
var result = switch (month) {
case JANUARY, JUNE, JULY -> 3;
case FEBRUARY, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER -> 1;
case MARCH, MAY, APRIL, AUGUST -> {
System.out.println("code block result");
yield 2;
}
default -> 0;
};
Assertions.assertEquals(2, result);
}
2023.04.30 - [기타/프로그래밍 언어] - [JAVA] 자바 17 특징 - 텍스트 블록
[JAVA] 자바 17 특징 - 텍스트 블록
1. 기존 스타일과의 비교 String textBlockHtml = """ example text """; @Test public void givenAnOldStyleMultilineString_whenComparing_thenEqualsTextBlock() { String expected = "\n" + "\n" + " \n" + " example text\n" + " \n" + ""; assertEquals(expect
lazy-man.tistory.com
2023.05.01 - [기타/프로그래밍 언어] - [JAVA] 자바 17 특징 - Record Type
[JAVA] 자바 17 특징 - Record Type
불변성을 가지는 데이터 클래스를 위한 타입이다. 자바 14 이전 버전에서는 불변의 데이터 클래스를 생성하기 위해서는 private final 필드, 모든 필드를 초기화하는 생성자, equals 메서드, toString 메
lazy-man.tistory.com
2023.05.01 - [기타/프로그래밍 언어] - [JAVA] 자바 17 특징 - Sealed Class
[JAVA] 자바 17 특징 - Sealed Class
sealed class, interface는 상속하거나 구현할 클래스를 지정하고, 지정한 클래스 외에는 상속 또는 구현할 수 없도록 하는 기능으로 무분별한 상속과 구현을 방지할 수 있습니다. 1. sealed 클래스(인터
lazy-man.tistory.com
2023.05.01 - [기타/프로그래밍 언어] - [JAVA] 자바 17 특징 - 기타
[JAVA] 자바 17 특징 - 기타
이번 포스팅에서는 자바 17의 특징 중 텍스트 블록, Switch 문, Record, Sealed 외의 특징에 대해 알아보도록 하겠습니다. 1. instanceof instanceof 체크할 때 변수를 선언할 수 있기 때문에 좀 더 간결한 코드
lazy-man.tistory.com