SIMPOLOR
단순하고 색있게
Java 17 주요 특징 및 개선 사항: Sealed Classes, Records, Pattern Matching 등
단순색
·
2024년 06월 15일
Java
자바 17(Java SE 17)은 2021년 9월에 릴리스되었으며, 장기 지원(LTS) 버전입니다. 자바 17은 여러 새로운 기능과 개선 사항을 포함하고 있으며, 장기 지원을 통해 안정성과 유지보수를 보장합니다 ## Sealed Classes (Standard) - Sealed 클래스가 표준 기능으로 도입되었습니다. - Sealed 클래스는 상속을 제한하여 더 강력한 타입 관리를 제공합니다. ``` public sealed class Shape permits Circle, Square { // ... } public final class Circle extends Shape { // ... } public final class Square extends Shape { // ... } ``` ## Records (Standard) - 자바 16에서 도입된 레코드가 자바 17에서 계속 표준 기능으로 제공됩니다. - 불변 데이터 객체를 간결하게 표현할 수 있습니다. ``` public record Point(int x, int y) {} Point point = new Point(1, 2); System.out.println(point.x()); // 1 System.out.println(point.y()); // 2 ``` ## Pattern Matching for switch (Preview) `switch` 문에 패턴 매칭 기능이 도입되었습니다. 이를 통해 조건 분기 코드를 더 간결하게 작성할 수 있습니다. ``` static String formatterPatternSwitch(Object obj) { return switch (obj) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); default -> obj.toString(); }; } ``` ## Foreign Function & Memory API (Incubator) JVM 외부의 네이티브 코드를 호출하고, 네이티브 메모리에 접근할 수 있는 기능이 도입되었습니다. ``` CLinker linker = CLinker.systemCLinker(); MethodHandle printf = linker.downcallHandle( linker.lookup("printf").get(), MethodType.methodType(int.class, MemoryAddress.class), FunctionDescriptor.of(CLinker.C_INT, CLinker.C_POINTER) ); printf.invoke(CLinker.toCString("Hello, World!").address()); ``` ## Vector API (Second Incubator) 고성능 벡터 연산을 지원하는 API가 계속해서 개선되었습니다. ``` VectorSpecies<Integer> SPECIES = IntVector.SPECIES_256; int[] a = {1, 2, 3, 4, 5, 6, 7, 8}; int[] b = {1, 2, 3, 4, 5, 6, 7, 8}; int[] c = new int[8]; IntVector va = IntVector.fromArray(SPECIES, a, 0); IntVector vb = IntVector.fromArray(SPECIES, b, 0); IntVector vc = va.add(vb); vc.intoArray(c, 0); ``` ## Context-Specific Deserialization Filters 역직렬화 필터링을 위해 컨텍스트별 필터를 설정할 수 있습니다. 이를 통해 보안성을 높일 수 있습니다. ``` ObjectInputFilter filter = ObjectInputFilter.Config.createFilter("maxbytes=1024;java.base/*;!*"); ObjectInputStream ois = new ObjectInputStream(inputStream); ois.setObjectInputFilter(filter); ``` ## Strong Encapsulation of JDK Internals JDK 내부 API의 강한 캡슐화를 지속하여 보안과 안정성을 강화합니다. ## New macOS Rendering Pipeline macOS에서 새로운 렌더링 파이프라인이 도입되었습니다. Apple Metal API를 사용하여 그래픽 성능을 개선합니다. ## Deprecate the Applet API for Removal Applet API가 더 이상 사용되지 않으며, 이후 릴리스에서 제거될 예정입니다. ## Removal of the Experimental AOT and JIT Compiler 실험적 기능으로 도입되었던 AOT (Ahead-of-Time) 및 JIT (Just-In-Time) 컴파일러가 제거되었습니다.
연관 포스트
Java 6 주요 특징 및 개선 사항: 성능 향상, 웹 서비스, 스크립팅 언어 지원 등
Java 7 주요 특징 및 개선 사항: 언어 개선, 새로운 IO API, 병렬 프로그래밍 등
Java 8 주요 특징 및 개선 사항: Lambda Expressions, Stream API, 날짜와 시간 API 등
Java 9 주요 특징 및 개선 사항: 모듈 시스템, JShell, Stream API 등
Java 10 주요 특징 및 개선 사항: Local Variable Type Inference, G1 GC 개선 등
Java 11 주요 특징 및 개선 사항: String 메서드, HTTP 클라이언트, ZGC 등
Java 12 주요 특징 및 개선 사항: Switch Expressions, Shenandoah GC 등
Java 13 주요 특징 및 개선 사항: 텍스트 블록, Switch Expressions, ZGC 등
Java 14 주요 특징 및 개선 사항: Pattern Matching, Records, Switch Expressions 등
Java 15 주요 특징 및 개선 사항: 텍스트 블록, Sealed Classes, ZGC 등
Java 16 주요 특징 및 개선 사항: Records, Pattern Matching, Sealed Classes 등
Java 17 주요 특징 및 개선 사항: Sealed Classes, Records, Pattern Matching 등
Java 18 주요 특징 및 개선 사항: Simple Web Server, UTF-8 기본 인코딩 등
Java 19 주요 특징 및 개선 사항: Pattern Matching, Virtual Threads, Foreign Function & Memory API 등
Java 20 주요 특징 및 개선 사항: Pattern Matching, Virtual Threads, Scoped Values 등
Java 21 주요 특징 및 개선 사항: Pattern Matching, Virtual Threads, Structured Concurrency 등