오라클, 자바16(Java 16) 발표 | 뉴스로
산업일반

오라클, 자바16(Java 16) 발표

오라클이 개발자의 생산성을 높이기 위해 17개의 신규 개선 사항을 새롭게 탑재한 자바16(오라클 JDK 16) 플랫폼을 발표했다.

이번에 공개된 최신 자바 개발 도구(Java Development Kit, 이하 JDK)는 자바 14에서 처음 미리보기 형태로 지원되었던 instanceof에 대한 패턴 매칭(JEP 394)과 레코드(JEP 395)와 같은 언어 기능을 개선된 형태로 제공한다. 또한 개발자는 새로운 패키징 도구 (JEP 392)를 사용하여 자체 내장된 자바 애플리케이션을 개발할 수 있을 뿐만 아니라, 벡터 API(JEP 338), 외부 링커 API(JEP 389) 및 외부 메모리 액세스 API(JEP 389)와 같은 세 가지 인큐베이팅 기능을 활용하고 보호 클래스 (JEP 397) 기능을 미리보기로 접할 수 있다.

오라클은 개발자들이 예측 가능한 방식으로 신규 자바 소식을 참고할 수 있도록 6개월에 한 번씩 관련 내용을 발표하고 있다. 이를 통해 관련 혁신의 흐름을 계속 이어감과 동시에, 지속적인 성능, 안정성 및 보안 역량 개선을 지원함으로써 모든 규모의 조직 및 산업 전반에 걸쳐 자바 보급률을 높여갈 수 있게 됐다.

조지 사브(Georges Saab) 오라클 자바 플랫폼 그룹 개발 담당 부사장은 “오라클의 최신 자바 출시는 6개월 마다 새롭게 반영되는 혁신의 힘을 여실히 보여준다”며, “1년 전 JDK 14의 일부로 도입했던 패턴 일치와 레코드 기능의 경우, 현업 적용 이후 여러번에 걸쳐 개발자 커뮤니티로부터 피드백을 수렴했다. 이러한 과정을 통해 자바 개발자가 초기 도입 단계에서 해당 기능을 다양하게 실험할 수 있는 기회를 넓혔을 뿐만 아니라, 유의미한 이용자 피드백을 반영하여 커뮤니티의 요구를 효과적으로 충족하는 두 개의 견고한 JEP를 완성할 수 있었다”고 밝혔다.

자바16의 주요 신규 기능은 오픈JDK 커뮤니티(OpenJDK Community), 자바 커뮤니티 프로세스(Java Community Process)에서 이루어진 오라클 엔지니어와 전 세계 자바 개발자 커뮤니티 구성원 간의 공개 검토, 주간 빌드(build)를 포함한 폭넓은 협업과 업계 전반에 걸친 개발의 결과물이다. 해당 기능들은 다음과 같다:

JDK 14에 최초 도입, 이번 JDK 16에서 완성된 언어 개선 기능
• JEP 394: instanceof에 대한 패턴 일치 – instanceof 연산자에 대한 패턴 일치를 통해 자바 프로그래밍 언어를 개선한다.
• JEP 395: 레코드 – 불변 데이터를 보다 투명하게 이동시키는 역할을 수행하는 클래스인 레코드를 기반으로, 자바 프로그래밍 언어를 개선한다. 이때 레코드는 명목상의 튜플(nominal tuples)로 생각될 수 있다.

개발자 생산성 향상을 위한 새로운 도구
• JEP 392: 패키징 도구 – 자체 내장 자바 애플리케이션을 패키징 할 수 있는 jpackage 도구를 제공한다.

향상된 메모리 관리를 통한 성능 개선
• JEP 387: 탄력적인 메타스페이스 – 메타스페이스(metaspace)와 같은 미사용 핫스팟(HotSpot) 클래스 메타 데이터 메모리를 보다 신속하게 운영 체제에 반환하고, 메타공간의 용량(footprint)을 줄이며, 유지 관리 비용 절감을 위해 메타 공간 코드를 단순화한다.
• JEP 376: ZGC: 동시 스레드 스택 처리 – ZGC 스레드 스택 처리를 안전점(safepoint)에서 동시 (concurrent) 단계로 이동한다. 해당 작업을 통해 동시 스택 처리로 이어지는 최종 주요 병목 현상을 제거할 수 있다.

개발자 생산성 및 유연성 제고를 위한 네트워킹 개선
• JEP 380: UNIX 도메인 소켓 채널 – 주요 UNIX 플랫폼과 윈도우에서 통용되는 UNIX 도메인 소켓의 전체 기능에 대한 지원을 java.nio.channels 패키지의 소켓 채널과 서버 소켓 채널 API에 추가한다. 동일한 호스트에서 프로세스 간 통신(IPC)을 위해 사용하는 UNIX 도메인 소켓은 인터넷 프로토콜(IP) 주소와 포트 번호가 아닌 파일 시스템 경로 이름으로 주소를 지정하는 것을 제외하면 TCP/IP 소켓과 기능 전반이 흡사하다.

호환 불가능 코드 사전 해결
• JEP 396: 기본 사항으로서의 강력한 JDK 내부 캡슐화 – JDK 9에서는 새로운 내부 API 요소를 강력하게 캡슐화하여 액세스를 제한한다. 그러나 데이터 마이그레이션을 지원하는 측면에서, JDK 9은 JDK 8에 포함되었던 패키지 내용을 의도적으로 런타임에서 강력하게 캡슐화하지 않았다. JDK 16은 sun.misc.Unsafe와 같은 중요한 내부 API를 제외한 JDK 내부 요소 대부분을 기본 사항으로 캡슐화함으로써 이러한 제약을 강화해 나가고 있다. 최종 사용자는 JDK 9 버전 이후 기본값으로 제공되는 덜 강력한(relaxed strong) 캡슐화 기능을 계속해서 선택할 수 있다. 이는 개발자가 내부 요소 사용으로부터 표준 API 사용으로 이전할 수 있도록 지원함으로써 개발자와 사용자 모두 기존 자바를 향후 출시될 최신 버전으로 쉽게 업그레이드하도록 지원한다.

• JEP 390: 값 기반(Value-Based) 클래스에 대한 경고 – 기본 래퍼(wrapper) 클래스를 값 기반(value-based)으로 지정하고, 향후 제거를 위해 생성자를 폐기(deprecate) 선언하고 새로운 폐기(deprecation) 경고를 표시한다. 자바 플랫폼에서 이러한 값 기반 클래스 인스턴스를 동기화하려는 부적절한 시도에 대해 미리 경고하는 방식으로 작동한다.

인큐베이팅 및 미리보기 기능
• JEP 338: 벡터 API(인큐베이터) – 지원 가능한 CPU 아키텍처에서 최적의 벡터 하드웨어 명령을 기반으로, 런타임에 안정적으로 수집되는 벡터 계산을 표현하기 위해 인큐베이터 모듈인 jdk.incubator.vector의 초기 반복 업무를 지원한다.
• JEP 389: 외부 링커 API(인큐베이터) – 네이티브 코드에 대한 정적 타입의(statically-typed) 순수 자바 액세스를 제공하는 API를 지원한다.
• JEP 393: 외부 메모리 액세스 API (세 번째 인큐베이터) – 자바 프로그램이 자바 힙(heap, 동적 메모리) 바깥의 외부 메모리에 안전하고 효율적으로 접근하도록 지원하는 API를 제공한다.
• JEP 397: 봉인(Sealed) 클래스 (두 번째 미리보기) – 봉인(Sealed) 클래스와 인터페이스 기반으로 자바 프로그래밍 언어를 향상시킨다. 봉인(Sealed) 클래스와 인터페이스는 다른 클래스나 인터페이스가 상속되거나 구현(implement)하는 것을 제한한다.

오픈JDK 참여자(contributor)를 위한 개선사항
• JEP 347: (JDK 소스 코드 내부에서) C ++ 14 언어 기능 사용 – JDK C++ 소스 코드에서 C++ 14 언어 기능의 사용을 허용하고, 이들 중 핫스팟 코드에서 사용 가능한 기능 관련 구체적인 지침을 제공한다.
• JEP 357: Mercurial에서 Git으로 마이그레이션 – 오픈JDK 커뮤니티의 소스코드 저장소를 Mercurial(hg)에서 Git으로 이전한다.
• JEP 369: GitHub로 마이그레이션 – GibHub에서 오픈JDK 커뮤니티의 Git저장소를 호스팅한다.

다양한 플랫폼에서 자바를 지원하는 신규 포트
• JEP 386: 알파인 리눅스 포트(Alpine Linux Port) – x64 및 AArch64 아키텍처 모두에서 JDK를 알파인 리눅스 및 musl을 기본 C 라이브러리로 사용하는 기타 리눅스 배포 버전으로 포팅한다.
• JEP 388: 윈도우/Aarch64 포트 – JDK를 윈도우/AArch64로 포팅한다.

지속적인 자바 개선
현대적인 애플리케이션 개발자의 진화하는 요구 사항을 충족하기 위해 혁신을 거듭하는 자바는 전 세계에서 가장 성공적인 개발 플랫폼 중 하나로 손꼽히고 있다. 오라클은 오라클 자바 SE 구독 고객에게 더욱 가치 있는 솔루션을 제공하기 위한 노력의 일환으로 그랄VM 엔터프라이즈(GraalVM Enterprise)에 대한 권한을 추가하기도 했다. 그랄VM은 특히 마이크로서비스 및 클라우드 네이티브 아키텍처의 성능을 개선하고 자원 소비 절감에도 기여할 수 있다. 오라클 자바 SE 구독을 활용하여 자바 자산을 관리하는 조직은 오라클의 자바 전문가와 직접 교류하고 최신 기능 개선을 적용하는 이점을 누릴 수 있을 뿐만 아니라, 다른 접근 방식 대비 상당한 비용 절감 효과를 경험할 수 있다.

소르본파리노르대학교(University Sorbonne Paris Nord) 조교수이자 파리 자바 이용자 그룹(Paris Java User Group)의 공동 주최자인 호세 포마드(José Paumard)는 “기존에는 3, 4년마다 발표되는 새로운 자바 기능들이 나의 관심을 끌었는데, 새로 바뀐 발표주기를 통해 보다 적극적이고 열정적인 자바 개발자이자 교육자로 거듭날 수 있었다”며, “특히 기존에 미리보기로 지원되었던 레코드 기능을 정식으로 사용할 수 있게 되면서 향후 데이터 처리 코드의 성능과 가독성을 향상시킬 수 있기를 기대한다”고 말했다.

개발자라면 누구나 3월 23일, 25일, 30일에 오라클이 개최하는 오라클 개발자 라이브: 자바 혁신(Oracle Developer Live: Java Innovations) 세션에서 자바16에 대한 자세한 정보를 습득하고, 관련 실습 교육을 수료할 수 있다.

뉴스제보 jebo@newsro.kr

<©국가정보기간뉴스–뉴스로, 무단 전재 & 재배포 금지>