원문: https://www.hungrycoders.com/blog/java-9-23-unleashed-the-developers-cheat-sheet-to-modern-java (Translated by Google Gemini)


주요 기능#

  • 패턴, instanceof, switch에서의 Primitive Types (미리보기): 패턴 매칭을 기본 타입으로 확장하여 상용구 코드(boilerplate code)를 줄입니다.
  • Scoped Values (세 번째 미리보기): 제한된 수명을 가진 변수를 도입하여 메모리 관리를 개선합니다.
  • Structured Concurrency (세 번째 미리보기): 구조화된 API를 통해 스레드 관리를 강화하여 동시성 처리를 단순화합니다.
  • Markdown Documentation Comments: Javadoc에 Markdown 지원을 추가하여 문서의 가독성을 향상시킵니다.
  • ZGC를 기본 가비지 컬렉터로: 세대별 Z Garbage Collector (ZGC)가 기본값으로 설정되어 성능과 응답성을 향상시킵니다.

개요 요약#

Java 23은 성능 및 개발자 생산성 향상 추세를 이어갑니다. 기본 타입을 지원하는 패턴 매칭을 개선하고, 더 안전한 메모리 관리를 위해 Scoped Values를 도입하며, 구조화된 API를 통해 동시성을 단순화합니다. Markdown 문서화는 개발자 경험을 개선하고, ZGC가 기본 컬렉터가 되어 더 나은 성능과 낮은 지연 시간을 보장합니다.

JPA 링크#

https://openjdk.org/projects/jdk/23/

Java 23 기능의 코드 예시#

  1. Primitive Types in Pattern Matching (JEP 455): 기본 타입과의 패턴 매칭은 instanceof 및 switch 문을 단순화하여 가독성을 향상시킵니다.
public class PrimitivePatternExample {
   public static void main(String[] args) {
       Object obj = 42;

       if (obj instanceof int x) {
           System.out.println("Matched int: " + x); // prints 42
       }

       switch (obj) {
           case int y -> System.out.println("Switch matched int: " + y); // prints 42
           default -> System.out.println("No match");
       }
   }
}
  1. Scoped Values for Safer Memory Management (JEP 441): Scoped Values는 변수를 특정 컨텍스트로 제한하여 의도하지 않은 데이터 유출을 줄입니다.
import java.lang.invoke.ScopedValue;

public class ScopedValueExample {
   static final ScopedValue<String> USERNAME = ScopedValue.newInstance();

   public static void main(String[] args) {
       ScopedValue.where(USERNAME, "Alice").run(() -> {
           System.out.println("Current user: " + USERNAME.get()); // prints "Alice"
       });

       // USERNAME is out of scope here
   }
}
  1. Structured Concurrency (JEP 428): Structured Concurrency는 메인 스레드가 진행하기 전에 모든 스레드가 완료되도록 보장하여 다중 스레드 코드를 단순화합니다.
import java.util.concurrent.StructuredTaskScope;

public class ConcurrencyExample {
   public static void main(String[] args) throws InterruptedException {
       try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
           var future1 = scope.fork(() -> fetchDataFromService1());
           var future2 = scope.fork(() -> fetchDataFromService2());

           scope.join(); // Wait for all tasks
           System.out.println("Results: " + future1.resultNow() + ", " + future2.resultNow());
       }
   }

   static String fetchDataFromService1() {
       return "Data1";
   }

   static String fetchDataFromService2() {
       return "Data2";
   }
}
  1. Markdown Documentation Comments (JEP 467): Markdown 지원으로 개선된 Javadoc은 문서의 구조와 가독성을 향상시킵니다.
/**
 * # Calculator
 * This class performs basic arithmetic operations.
 *
 * ## Methods
 * - `add`: Adds two numbers.
 * - `subtract`: Subtracts two numbers.
 */
public class Calculator {

   /**
    * Adds two integers.
    */
   public int add(int a, int b) {
       return a + b;
   }

   /**
    * Subtracts the second integer from the first.
    */
   public int subtract(int a, int b) {
       return a - b;
   }
}