Java/Version
Java 14
창욱씨
2021. 9. 25. 18:20
반응형
🆕 정식 출시 (Standard Features)
1. Switch Expressions (JEP 361)
Java 12, 13에서 프리뷰였던 Switch 표현식이 정식 기능으로 확정되었습니다.
// 화살표 형태
String result = switch (day) {
case MONDAY, FRIDAY -> "주중";
case SATURDAY, SUNDAY -> "주말";
default -> "기타";
};
// yield 키워드로 값 반환
int numLetters = switch (day) {
case MONDAY, FRIDAY -> 6;
case TUESDAY -> {
System.out.println("Tuesday!");
yield 7;
}
default -> -1;
};
🔬 프리뷰 기능 (Preview Features)
2. Records (JEP 359) — 1차 프리뷰
불변(immutable) 데이터 클래스를 간결하게 선언하는 기능입니다.
// 기존 방식 (boilerplate 많음)
public class Point {
private final int x;
private final int y;
// getter, equals, hashCode, toString 직접 작성...
}
// Record 사용 (Java 14~)
public record Point(int x, int y) {}
// 자동으로 생성됨:
// - 생성자
// - getter (x(), y())
// - equals(), hashCode(), toString()
3. Pattern Matching for instanceof (JEP 305) — 1차 프리뷰
instanceof 후 별도 캐스팅이 불필요합니다.
// 기존 방식
if (obj instanceof String) {
String s = (String) obj;
System.out.println(s.length());
}
// Java 14 (프리뷰)
if (obj instanceof String s) {
System.out.println(s.length()); // s를 바로 사용 가능
}
4. Text Blocks (JEP 368) — 2차 프리뷰
여러 줄 문자열을 깔끔하게 작성할 수 있습니다.
// 기존 방식
String html = "<html>\n" +
" <body>\n" +
" <p>Hello</p>\n" +
" </body>\n" +
"</html>";
// Text Block (프리뷰)
String html = """
<html>
<body>
<p>Hello</p>
</body>
</html>
""";
⚙️ JVM / 성능 개선
| JEP | 내용 |
|---|---|
| JEP 345 | NUMA-Aware Memory Allocation for G1 (G1 GC의 NUMA 메모리 할당 최적화) |
| JEP 363 | Concurrent Mark Sweep (CMS) GC 제거 |
| JEP 364/365 | macOS 및 Windows에서 ZGC 지원 |
| JEP 366 | ParallelScavenge + SerialOld GC 조합 Deprecated |
🛠️ 개발 도구 개선
5. Helpful NullPointerExceptions (JEP 358)
NPE 발생 시 어떤 변수가 null인지 정확한 메시지를 제공합니다.
// 기존: NullPointerException 만 표시
// Java 14: 어떤 변수가 null인지 명확히 출력
a.b.c.d = 99;
// "Cannot read field 'c' because 'a.b' is null"반응형