Java 22
2025. 12. 28. 21:47ㆍJava/버전별 변화
반응형
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());
반응형