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"
반응형