기술 공부 끄적끄적/프로그래밍 언어

Java SE 22 (JDK22) 업데이트 내용

띠리링구 2024. 1. 12. 16:59

내가 나무위키에 작성한걸 복붙해왔다.

현재 Rampdown Phase One에 있고(2024년 1월 12일 기준) 일정대로라면 2024년 3월 19일에 GA가 될 예정이다.
주의 : 프리뷰 기능들은 기본적으로 비활성화 되어있는 경우가 있음.
  • JEP 423: G1 GC에 Region Pinning 기술을 구현해 지연 시간(latency) 단축
  • JEP 447: super() 호출 전에 다른 statement 실행을 가능하게함 (프리뷰 기능). 객체 생성 전에 미리 인자 등을 검증할 수 있다면 생성자를 호출할 필요 없이 미리 예외를 던질 수 있을 것이다.
    public class PositiveBigInteger extends BigInteger {
    
        public PositiveBigInteger(long value) {
            if (value <= 0)
                throw new IllegalArgumentException("non-positive value");
            super(value);
        }
    
    }
  • JEP 454: 외래 함수 및 메모리 API . 자바 런타임 외부 데이터 및 함수와 상호운용하기 위함.
  • JEP 456: 이름없는 변수 및 패턴. 안쓰는 변수 이름을 언더스코어(_)로 표기하는 것응 허용해 가독성을 향상한다.
    static int count(Iterable<Order> orders) {
        int total = 0;
        for (Order _ : orders)    // Unnamed variable
            total++;
        return total;
    }
String s = ...
try {
    int i = Integer.parseInt(s);
    ... i ...
} catch (NumberFormatException _) {        // Unnamed variable
    System.out.println("Bad number: " + s);
}
  • JEP 457: Class 파일 API (프리뷰). 자바 클래스 파일은 파싱하고 생성하고 변환하는 표준 API 제공.
  • JEP 458: java 런처 .java 파일을 다이렉트로 실행할 때 여러 파일을 실행할 수 있도록 함. 자바를 갖고노는걸(tinkering) 편하게 하기 위한 편의성 기능. 이러한 편의성 기능 중 하나로 jshell이 있다.
  • JEP 459: String template (두번째 프리뷰). String interpolation으로 가독성과 편의성을 향상.
String title = "My Web Page";
String text  = "Hello, world";
String html = STR."""
        <html>
          <head>
            <title>\{title}</title>
          </head>
          <body>
            <p>\{text}</p>
          </body>
        </html>
        """;
  • JEP 460: 벡터 API (7번째 인큐베이터 단계)
  • JEP 461: Stream Gatherers (프리뷰). 자바 stream api에서 커스텀 gatherer을 구현해 스트림 중간 단계 연산의 가독성을 향상시킨다.
// 새 기능을 이용해 WindowFixed를 정의했다고 가정 (자세한 건 JEP 461 문서 참고)
jshell> Stream.of(1,2,3,4,5,6,7,8,9).gather(new WindowFixed(3)).toList()
$1 ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  • JEP 462: 구조화된 동시성 ("Structured Concurrency") (두번째 프리뷰). 쓰레드 캔슬이나 셧다운에 대한 리스크를 줄이고 동시성 코드의 observability 향상. 여러 쓰레드에서 실행되는 관련있는 작업들을 그룹핑하는 기능이다.
  • JEP 463: 암묵적으로 정의된 클래스와 인스턴스 main 메소드 (두번째 프리뷰). 자바 초보자의 진입장벽을 낮추기 위한 기능. ("New programmers just want to write and run a computer program")
void main() {
    System.out.println("Hello, World!");
}
  • JEP 464: Scoped values (두번째 프리뷰). 같은 쓰레드 내에서의 공유 데이터를 관리하기 위한 컨테이너 오브젝트. ThreadLocal과 비슷하지만 ThreadLocal의 단점을 보완해 더 적은 리소스를 사용하고 더 안전하다고 한다. (특히 VirtualThreads, StructuredConcurrency랑 같이 활용될 때)