
오라클이 자바 24(Java 24)의 출시를 발표했다.
자바 24(오라클 JDK 24)는 개발자의 생산성 극대화 및 혁신 추진을 지원하는 수천 가지 개선 사항을 제공한다. 또한, 플랫폼의 성능과 안정성 및 보안 개선 사항들은 기업 조직의 비즈니스 성장 가속화를 지원한다. 2025년 3월 18일-20일(현지 시간) 캘리포니아 레드우드 쇼어스에서 열리는 자바원 2025(JavaOne 2025)에서 최신 자바 24 릴리스에 대한 보다 자세한 내용들을 확인할 수 있다.
언어 기능
• JEP 488: 패턴, 인스턴스오브, 스위치의 기본 유형(두 번째 미리보기): 보다 균일하고 표현력이 풍부한 언어를 통해 개발자의 자바 프로그래밍 생산성 증대를 지원한다. 이 기능은 패턴 매칭, 인스턴스오브, 스위치 사용 시 개발자가 직면하는 기본 유형 관련 제한 사항들을 제거함으로써 패턴 매칭을 개선할 수 있게 해 준다. 또한 모든 패턴 컨텍스트에서 기본 유형 패턴을 허용하고 인스턴스오브 및 스위치 확장을 통해 모든 기본 유형과의 호환성을 제공한다. 애플리케이션에 AI 추론을 통합하는 경우 개발자들은 특히 이 기본 유형 지원 기능의 혜택을 누리게 된다.
• JEP 492: 유연한 생성자 본문(세 번째 미리보기): 생성자 본문 내에 별도로 두 개의 프롤로그 및 에필로그 단계를 도입해 개발자가 코드 안정성을 개선할 수 있게 지원한다. 이 기능은 개발자가 현재는 보조 정적 메서드, 보조 중간 생성자 또는 생성자 인수에 반드시 포함시켜야 하는 논리를 보다 자연스럽게 배치할 수 있게 지원한다. 또한 하위 클래스 생성자의 코드가 상위 클래스 인스턴스화를 방해하지 않는다는 기존의 보장을 유지하기 때문에 메서드가 오버라이드된 경우 클래스의 안정성을 향상시킨다.
• JEP 494: 모듈 임포트 선언(두 번째 미리보기): 모듈 자체에 임포팅 코드가 없어도 모듈에서 엑스포트된 모든 패키지를 개발자가 신속하고 손쉽게 임포트할 수 있게 지원함으로써 개발자 생산성 개선을 돕는다. 이 기능은 모든 개발자의 모듈러 라이브러리 재사용을 간소화해 주고, 초보자들이 패키지 계층 내 제3자 라이브러리 및 기본 자바 클래스의 위치를 익히지 않고도 각각을 보다 손쉽게 사용할 수 있게 해 준다. 이 기능은 또한 비즈니스 논리를 네이티브 AI 추론, 라이브러리 또는 서비스 호출에 신속히 통합하고자 하는 개발자들에게 유용하다.
• JEP 495: 간단한 소스 파일 및 인스턴스 기본 메서드(네 번째 미리보기): 학생들에게 자바 프로그래밍에 대한 손쉬운 접근성을 제공함으로써, 대규모 프로그램을 위해 설계된 언어 기능에 대한 이해 없이도 생애 첫 프로그램을 작성할 수 있게 지원한다. 덕분에 교사 및 강사들은 점진적인 방식으로 관련 개념을 점진적으로 소개할 수 있고, 학생들은 먼저 단일 클래스 프로그램에 대한 간소화된 선언을 작성한 후 프로그래밍 실력이 성장함에 따라 보다 고급 기능을 활용해 프로그램을 원활하게 확장할 수 있게 된다. 숙련된 자바 개발자들 역시 대규모 프로젝트를 위해 설계된 도구를 사용하지 않고도 간결하고 효율적으로 소규모 프로그램을 작성할 수 있다.
라이브러리
• JEP 485: 스트림 수집기(Stream Gatherers:): 스트림 API를 개선하여 커스텀 중간 연산을 지원함으로써 스트림 파이프라인이 기존의 내장형 중간 연산으로는 달성하기 어려운 방식으로 데이터를 변환할 수 있도록 지원하고, 결과적으로 개발자가 자바 코드를 보다 효율적으로 읽고, 쓰고, 유지 관리할 수 있게 지원하는 기능이다.
• JEP 484: 클래스-파일 API: 자바 클래스 파일의 구문 분석(parsing), 생성, 변환용 표준 API를 제공하고 자바 가상 머신(Java Virtual Machine) 사양에 정의된 클래스 파일 포맷을 추적함으로써 개발자의 생산성 향상을 지원한다.
• JEP 487: 범위가 지정된 값(네 번째 미리보기): 스레드 내에서, 그리고 스레드 간에 변경 불가능한 데이터를 공유할 수 있도록 지원함으로써 개발자 프로젝트의 사용 편의성, 이해 가능성, 성능, 견고성을 향상시켜 주는 기능이다.
• JEP 489: 벡터 API(9차 인큐베이터): 런타임에서 안정적으로 컴파일 되는, 벡터 연산을 표현하는 API를 지원되는 CPU 아키텍처의 벡터 명령에 도입하여 개발자 생산성 향상을 지원한다. 이를 통해 개발자는 AI 추론 및 컴퓨트 시나리오에 자주 사용되는 동등한 스칼라 연산보다 우수한 성능을 확보할 수 있다.
• JEP 499: 구조화된 동시성(네 번째 미리보기): 구조화된 동시성을 위한 새로운 API를 통해 동시 프로그래밍을 간소화함으로써 개발자가 동시성 코드의 유지관리 용이성, 안정성, 관찰 가능성을 개선할 수 있도록 한다. 구조화된 동시성은 다양한 스레드에서 실행 중인 관련 작업 그룹을 단일 작업 단위로 취급함으로써 스레드 누수 및 취소 지연 등 취소 및 종료로 인해 흔히 발생하는 위험을 최소화할 수 있게 해 준다.
보안 라이브러리
• JEP 478: 키 추출 함수 API(미리보기): 전송 중인 데이터에 대한 암호화 보안 기능을 제공함으로써 개발자가 새로운 양자 컴퓨팅 환경에 대비할 수 있게 지원한다. 이 기능은 기밀성 및 커뮤니케이션 무결성을 향상시킨다.
• JEP 496: 양자 내성 모듈 격자 기반의 키 캡슐화 매커니즘: 양자 내성 모듈 격자 기반의 키 캡슐화 매커니즘(ML-KEM)의 구현을 제공함으로써 자바 애플리케이션 보안 강화를 지원한다. 이 기능은 자바 플랫폼을 위한 양자 내성 준비 및 궁극적인 양자 내성 암호화(PQC) 제공 지원을 위한 필수적인 단계로, 이는 키 캡슐화 매커니즘이 공용 키 암호화를 통해 비보안 커뮤니케이션 채널에서 대칭 키를 보호하는 데 사용되기 때문이다.
• JEP 497: 양자 내성 모듈 격자 기반의 디지털 사인 알고리즘: 양자 내성 모듈 격자 기반의 디지털 사인 알고리즘(ML-DSA)의 구현을 제공함으로써 자바 애플리케이션 보안 강화를 지원한다. 디지털 사인은 데이터에 대한 무단 수정을 감지하고 서명자의 신원을 인증하는 데 사용되기 때문에 JEP 496과 마찬가지로 이 기능 역시 자바 플랫폼을 위한 양자 내성 준비 및 궁극적인 PQC 제공을 위해 중요한 단계다. ML-DSA는 미래의 양자 컴퓨팅 공격에 대비하기 위해 설계되었으며, 미국 국립표준기술연구소(NIST)의 FIPS 204를 바탕으로 표준화되었다.
도구
• JEP 493: JMOD 없이 런타임 이미지 연결: j링크(jlink) 도구가 JDK의 JMOD 파일을 사용하지 않고도 커스텀 런타임 이미지를 생성할 수 있게 함으로써 개발자 효율성 개선을 지원한다. 이 방법으로 JDK의 크기를 약 25% 줄일 수 있다. 이를 통해 개발자는 독립형 JMOD 파일, 모듈식 JAR 파일, 이전에 링크된 런타임 이미지의 일부 등 모듈의 종류와 관계없이 모듈에서 런타임 이미지를 연결할 수 있다. 이 기능은 JDK 구축 단계에서 활성화되어야 하며, 기본으로 활성화되지 않는다. 일부 JDK 제공업체는 이 기능이 비활성화되도록 선택할 수 있다.
성능 및 런타임 업데이트
• JEP 450: 간결한 객체 헤더(실험 단계): 96에서 128비트 사이의 핫스팟 JVM 객체 헤더 크기를 64비트 아키텍처의 64비트로 줄임으로써 개발자가 생산성을 높일 수 있게 지원한다. 이를 통해 힙(heap) 크기를 줄이고, 배포 밀도를 개선하고, 데이터 지역성을 높일 수 있다.
• JEP 475: G1 후반 장벽 확장: G1 가비지 컬렉터 장벽 확장을 C2 JIT 컴파일 파이프라인의 초반에서 후반으로 변경하여 개발자 효율성을 높인다. 변경이 플랫폼별 최적화 및 레지스터 할당 후 이루어지는 경우 오버헤드를 줄일 수 있다. 이 기능은 G1 가비지 컬렉터의 장벽 구현을 간소화함으로써 C2 생성 코드의 효율성, 이해가능성, 복원력, 품질 개선을 지원한다.
• JEP 483: AOT(Ahead-of-Time) 클래스 로딩 및 연결: 핫스팟 자바 가상 머신(HotSpot Java Virtual Machine) 시동 시 애플리케이션의 클래스를 로딩 및 연결 상태에서 즉시 가용하게 함으로써 개발자의 생산성 증가 및 시동 시간 개선을 지원한다. 이 기능은 j링크 또는 j패키지(jpackage) 도구가 필요하지 않으며, 명령줄을 통해 애플리케이션 시동 방식을 변경하거나 애플리케이션, 라이브러리, 프레임워크를 변경할 필요가 없다. 결과적으로 지속적인 시동 및 예열 시간 개선을 위한 기반 마련에 도움이 된다.
• JEP 490: ZGC: 비세대 모드 제거: Z 가비지 컬렉터(ZGC)의 비세대 모드를 제거함으로써 개발자가 두 개의 다른 모드 지원에 필요한 유지 관리 비용을 줄일 수 있게 지원한다.
• JEP 491: 고정 없이 가상 스레드 동기화: 동기화된 메서드 및 문(statement)을 사용하는 자바 코드 및 라이브러리의 확장성을 넓힘으로써 개발자 생산성 증대를 지원한다. 가상 스레드가 기본 플랫폼 스레드를 릴리스할 수 있게 지원하는 이 기능은 개발자가 더 많은 가상 스레드에 대한 액세스를 바탕으로 애플리케이션 워크로드를 관리할 수 있게 해 준다.
소스 코드
• JEP 404: 세대별 셴언도우(Shenandoah)(실험 단계): 지속가능한 처리량, 로드 스파이크 복원력, 메모리 활용도를 개선해 주는 실험 단계의 세대별 컬렉션 기능을 통해 셴언도우 가비지 컬렉터를 개선함으로써 개발자 생산성 증대를 지원한다.
• JEP 479: 윈도우 32비트 x86 포트 제거: 소스 코드를 제거하고 윈도우 32비트 x86 포트의 지원을 구축함으로써 JDK의 구축 및 테스트 인프라를 간소화하는 방식으로 개발자의 효율성 개선을 지원한다.
• JEP 501: 제거용 32비트 x86 포트 지원 중단: 향후 릴리스에서의 32비트 x86 포트 제거를 목적으로 지원을 중단함으로써 개발자 생산성 증대를 지원한다. 이 기능은 개발자가 32비트 x86 포트 폴백 구현 없이도 플랫폼별 지원에 필요한 새로운 기능들을 활용할 수 있게 해 준다.
또한 최신 보안 기능들을 도입하고, 안전하지 않은 기능들을 점진적으로 제거 및 지원 중단함으로써 오라클은 자바의 무결성 유지 및 소프트웨어 개발 모범 사례와의 연계에 대한 자사의 헌신을 보여준다. 오라클은 향후 자바 릴리즈에서 제거될 세 개의 기능(JEP 472: JNI 사용 제한 준비, JEP 486: 보안 관리자 영구 비활성화, JEP 498: sun.misc.Unsafe에서 메모리 액세스 메서드 사용 시 경고)을 지정한 바 있다.
자바 24 릴리스의 기능들은 오픈JDK 및 자바 공동체 프로세스(JCP)를 통한 오라클과 글로벌 자바 개발자 공동체 회원들 간의 지속적인 협력의 결과다. 자바 24에 추가된 새로운 기능들에 대한 보다 자세한 정보는 자바 24 기술 블로그에서 확인할 수 있다.