SIMPOLOR
단순하고 색있게
Java 20 주요 특징 및 개선 사항: Pattern Matching, Virtual Threads, Scoped Values 등
단순색
·
2024년 06월 17일
Java
자바 20(Java SE 20)은 2023년 3월에 릴리스되었으며, 여러 새로운 기능과 개선 사항을 포함하고 있습니다. ## Pattern Matching for switch (Fourth 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(); }; } ``` ## Virtual Threads (Second Preview) 경량 쓰레드인 가상 쓰레드가 계속해서 개선되었습니다. 이는 동시성을 더 쉽게 다룰 수 있도록 하여, 고성능 서버 애플리케이션 개발에 도움을 줍니다. ``` try (var executor = Executors.newVirtualThreadPerTaskExecutor()) { executor.submit(() -> { Thread.sleep(1000); return "Hello"; }); } ``` ## Structured Concurrency (Second Incubator) 구조적 동시성을 도입하여, 쓰레드 라이프 사이클 관리를 단순화하고, 예외 처리를 일관성 있게 할 수 있도록 합니다. ``` try (var scope = new StructuredTaskScope.ShutdownOnFailure()) { Future<String> future1 = scope.fork(() -> { Thread.sleep(1000); return "Task 1"; }); Future<String> future2 = scope.fork(() -> { Thread.sleep(500); return "Task 2"; }); scope.join(); scope.throwIfFailed(); System.out.println(future1.resultNow()); System.out.println(future2.resultNow()); } ``` ## Foreign Function & Memory API (Fourth 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 (Fifth 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); ``` ## Scoped Values (Preview) Scoped Values는 쓰레드 로컬 변수를 대체하여 동시성 문제를 줄이고, 더 간결한 코드 작성을 지원합니다. ``` public static final ScopedValue<String> SCOPED_VALUE = ScopedValue.newInstance(); public static void main(String[] args) { try (var scope = new ScopedValue.Scope()) { SCOPED_VALUE.set("Hello, Scoped Values"); someMethod(); } } static void someMethod() { System.out.println(SCOPED_VALUE.get()); } ```
연관 포스트
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 등