Java/버전별 변화

Java 20

창욱씨 2025. 7. 20. 00:15
반응형

Java20은 기능적인 변화보다는 프리뷰와 Incubator API 위주로 변경점이 존재합니다. 즉 당장 사용되기보다는 추후 버전에서 정식 기능으로 구현하기 위해 준비하는 단계입니다.

Scoped Values(Incubator)

Scoped Values는 주로 다중 스레드 환경에서 변경 불가능한 값을 스레드 간에 안전하게 공유하기 위해서 사용됩니다. 특히 Virtual Thread와 함께 사용될 때 강력한 성능과 구조적 병렬성을 제공합니다.

기존 Thread Local의 문제점

  • 메모리 누수 위험
  • 값 변경이나 삭제를 잊으면 문제가 발생

특징

  • 특정 작업 범위(scope) 내에서만 사용할 수 있습니다.
  • 불변이며 Thread Local보다 더 안전하고 성능이 좋습니다.
import java.lang.ScopedValue;

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

    public static void main(String[] args) {
        ScopedValue.where(USERNAME, "Alice").run(() -> {
            greetUser();
        });
    }

    static void greetUser() {
        System.out.println("Hello, " + USERNAME.get());
    }
}

Structed Concurrency(Preview)

작업 단위를 구조화된 방식으로 관리하는 API

try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
    Future<String> user  = scope.fork(() -> fetchUser());
    Future<Integer> order = scope.fork(() -> fetchOrder());

    scope.join();
    scope.throwIfFailed();

    System.out.println(user.result() + ", " + order.result());
}

Record Patterns(Preview)

instaceof와 패턴 매칭을 결합하여 record 타입을 더 쉽게 분해

if (obj instanceof Point(int x, int y)) {
    System.out.println("x = " + x + ", y = " + y);
}

Pattern Matching for switch(Preview)

switch 문에서 타입 패턴 매칭 사용 가능

switch (obj) {
    case String s -> System.out.println("String: " + s);
    case Integer i -> System.out.println("Int: " + i);
    default -> System.out.println("Unknown");
}

Foreign Function & Memory API(Incubator)

Java 코드에서 C라이브러리 호출 및 native memory 접근을 지원합니다. JNI보다 안전하고 간단한 방식을 제공합니다.

Virtual Thread

Virtual Thread에 대한 안정화 작업 정도만 진행되었습니다.
자세한 내용은 아래 링크 참고 부탁드립니다.

Virtual Thread

반응형

'Java > 버전별 변화' 카테고리의 다른 글

Java 22  (0) 2025.12.28
Java 21  (1) 2025.08.07
Java 19  (1) 2025.05.14
Java 18  (1) 2025.05.07
Java 17  (0) 2022.08.23