Java 14의 새로운 기능
1. 이전 버전에서 넘어온 기능들
1.1 Switch 구문
새로운 Switch 구문은 Java 12, 13에서 Preview 모드로 제공되었다. 그러나 이제 새로운 Switch 구문은 표준화되어 정식으로 JDK에 포함되어졌다. 이것이 의미하는 건, 이제 이 기능을 Preview 모드에서 뿐만 아니라 Production 코드에서도 사용할 수 있다는 것이다.
간단한 예시를 살펴보자. 아래 코드는 새로운 Switch 구문이 생기기 전에 작성된 코드이다.
boolean isTodayHoliday;
switch (day) {
case "MONDAY":
case "TUESDAY":
case "WEDNESDAY":
case "THURSDAY":
case "FRIDAY":
isTodayHoliday = false;
break;
case "SATURDAY":
case "SUNDAY":
isTodayHoliday = true;
break;
default:
throw new IllegalArgumentException("What's a " + day);
}
이제 새로운 Switch 구문을 써보자
boolean isTodayHoliday = switch (day) {
case "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY" -> false;
case "SATURDAY", "SUNDAY" -> true;
default -> throw new IllegalArgumentException("What's a " + day);
};
1.2 텍스트 블록 (Preview)
텍스트 블록은 여전히 메인스트림의 업그레이드가 되기위한 여정 위에 있다. 여전히 Preview 모드로 제공된다.
멀티 라인 문자열을 쓰기 쉽게된 Java 13에서의 기능에 더해, 텍스트 블록은 이제 2가지 새로운 이스케이프 시퀀스를 갖는다.
1) \: 줄의 마지막임을 나타내지만 개행 문자는 추가되지 않는다.
2) \s: 싱글 스페이스를 나타낸다.
아래의 예시를 보자.
String multiline = "A quick brown fox jumps over a lazy dog; the lazy dog howls loudly.";
이게 아래처럼 쓰여질 수 있다.
String multiline = """
A quick brown fox jumps over a lazy dog; \
the lazy dog howls loudly.""";
2. 새로운 Preview 기능
2.1 Record (Preview)
Data 모델에서의 반복되는 보일러플레이트 코드를 제거하기 위해 Record라는 것이 소개되었다. 이것은 일상의 개발을 단순화하고 효율성을 높이며 휴먼 에러의 위험성을 최소화해준다.
예를 들면, id와 password를 가지고 있는 User라는 data 모델은 아래와 같이 단순히 정의할 수 있다.
public record User(int id, String password) { };
우리는 새로운 키워드인 record를 사용할 수 있다. 이 간단한 선언은 자동으로 생성자, getter, equals, hashCode, toString 메서드를 추가해준다.
JUnit 테스트에서 이 예시를 더 자세히 살펴보자.
private User user1 = new User(0, "UserOne");
@Test
public void givenRecord_whenObjInitialized_thenValuesCanBeFetchedWithGetters() {
assertEquals(0, user1.id());
assertEquals("UserOne", user1.password());
}
@Test
public void whenRecord_thenEqualsImplemented() {
User user2 = user1;
assertEquals(user1, user2);
}
@Test
public void whenRecord_thenToStringImplemented() {
assertTrue(user1.toString().contains("UserOne"));
}
3. 새로운 Production 기능
3.1 도움을 주는 NullPointerException
이전까지 NullPointerException의 stack trace는 주어진 파일의 주어진 라인에서 Null이 발생했다는 정보 이외에는 특별한 정보를 주지 못했다.
이제 Java는 주어진 라인에서 무엇이 정확히 Null인지를 짚어주게되었다.
아래 간단한 예시를 살펴보자.
int[] arr = null;
arr[0] = 1;
이전 버전에서 이 코드를 실행했을 경우, 로그는 아래와 같이 나타났다.
Exception in thread "main" java.lang.NullPointerException
at com.baeldung.MyClass.main(MyClass.java:27)
그러나 이제는 아래와 같이 로그가 나타난다.
java.lang.NullPointerException: Cannot store to int array because "arr" is null
※ 참조