Java 22

2025. 12. 28. 21:47Java/버전별 변화

반응형

1. Unnamed Variables & Patterns (JEP 456) - 정식 기능

언더스코어(_)를 사용하여 사용하지 않는 변수나 패턴을 표시할 수 있습니다.

// 사용하지 않는 변수
try {
    // ... 
} catch (Exception _) {  // 예외 변수를 사용하지 않음
    System.out.println("에러 발생");
}

// 람다에서 사용하지 않는 파라미터
list. forEach((_, value) -> System.out.println(value));

// 패턴 매칭에서
if (obj instanceof Point(int x, _)) {  // y 값은 필요 없음
    System.out.println("x = " + x);
}

2. Statements Before super() (JEP 447) - 프리뷰

생성자에서 super() 호출 전에 문장을 실행할 수 있습니다.

public class Child extends Parent {
    public Child(int value) {
        // super() 전에 검증 가능! 
        if (value < 0) {
            throw new IllegalArgumentException("음수 불가");
        }
        super(value);
    }
}

3. String Templates (JEP 459) - 두 번째 프리뷰

문자열 템플릿을 통한 안전한 문자열 보간 기능

String name = "홍길동";
int age = 25;
String message = STR."이름:  \{name}, 나이:  \{age}";

4. Stream Gatherers (JEP 461) - 프리뷰

Stream API에 커스텀 중간 연산을 추가할 수 있습니다.

// 고정 크기 윈도우로 그룹화
List<List<Integer>> windows = Stream.of(1, 2, 3, 4, 5)
    .gather(Gatherers.windowFixed(2))
    .toList();
// 결과: [[1, 2], [3, 4], [5]]

5. Structured Concurrency (JEP 462) - 두 번째 프리뷰

구조화된 동시성으로 멀티스레드 프로그래밍 단순화

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

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

    return new Response(user.resultNow(), order.resultNow());
}

6. Scoped Values (JEP 464) - 두 번째 프리뷰

ThreadLocal의 대안으로 불변 데이터 공유

final static ScopedValue<User> CURRENT_USER = ScopedValue.newInstance();

ScopedValue.where(CURRENT_USER, user)
    .run(() -> processRequest());

반응형

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

Java 21  (1) 2025.08.07
Java 20  (0) 2025.07.20
Java 19  (1) 2025.05.14
Java 18  (1) 2025.05.07
Java 17  (0) 2022.08.23