DEV Community

Composite
Composite

Posted on

자바 17이 다가오면...

자바 17은 8, 11 에 이은 세번째 LTS 버전이다.
즉, 걱정 없이 써도 되는 버전이라는 거다.
현재 한국의 자바도 그렇고 글로벌하게 자바는 현재 8이 지배적일 것이다.
내가 몸담고 있는 회사에도 8 넘는 자바로 돌아가는 프로젝트는 찾을 수 없었다.
그리고 대부분 오픈소스 및 상용 프로젝트는 여전히 8을 지원하고 있고.
이정도로 보수적인 체제 아래 8 버전은 지배적이다.
그나마 11 버전이 야금야금 먹고 있다는 건 안비밀 (특히 네카라쿠배)

자, 나는 자바 17이 세번째 LTS인 점에서 기대를 품고 있다.
만약 당신도 거대한 기대를 품고 있다면 막상 뚜껑 열면 팍 식을 수도 있을 것이다.
왜냐면 이미 12(취소)~16까지 새 기능의 연장선이기 때문이다.
원문은 여길 보면 된다.

애플릿 API 제거 (JEP-398)

자바 9부터 애플릿 쓰지 말라고 그렇게 강조했을 것이다.
물론 대부분 8을 쓰고, 게다가 애플릿 쓰는 곳도 사실 많이 줄어서 사실상 지켜주는 거나 마찬가지.
17부터는 애플릿 API가 사라져서 쓸 수가 없게 된다.
물론 애플릿을 쓴다면 자바를 업글하는 멍청한 짓을 할 리는 없겠지만.

애플 실리콘 대응(macOS/AArch64) (JEP-391)

일단 자바 8이나 11 LTS는 애플 실리콘을 공식적으로 지원하지 않는다.
자바 13이 되어서야 그나마 로제타 호환성을 갖추고,
자바 16 EA+10 불안정 버전에서야 네이티브 지원을 시작했다.
JDK 17은 실리콘 맥을 공식으로 네이티브 지원하여 재대로 쓸 수 있는 날이 올 것이다.
참고로 비슷한 시기에 닷넷도 6 버전이 출시되어 여기서도 애플 실리콘을 네이티브로 지원한다고 하니 닷넷도 한다면 기대하도록 하자.

아, 오해할 수 있는데 자바는 공식적으로 ARM 프로세서용으로 이미 가지고 있으며 당장 8 버전에서도 지원한다. 임베디드 분야에서 쓰는 특성 상 쓸 일이 별로 없고, 만약 쓴다고 해도 오라클의 살인적인 라이선스 계약이 네 회사를 기다리고 있겠지만.
내가 '살인적인 라이선스' 용어 꺼낸 건 윈도우 서버 이외로는 처음이다.

MacOS 렌더링 파이프라인 (JEP-382)

애플 개발에 몸 좀 담궈봤다면 다들 아시다시피 OpenGL은 버린지 오래고 Metal을 밀고 있다. Vulkan의 경우 애플의 참여는 있었으나 당연히 지원을 안 한다. Vulkan을 주도한 AMD 그래픽카드가 낀 맥 제품에도 못 쓰는 설움이 있다. 물론 MoltenVK가 설움을 씻어주긴 하지만 100%는 못 씻겨준다.

JDK도 엄연히 GPU 렌더링 영역이 있으며, 이게 없었다면 마인크래프트는... 일단 현재까지 OpenGL을 썼기 때문에 참 난감하기도 하다.
자바 17부터는 이 렌더링 API의 백엔드를 Metal로 교체될 것이라 한다.
그렇게 되면 그나마 좀 부드러운 자바의 렌더링 결과물을 기대할 수 있을 것이다.

뭔가 좀 애플에 너무 신경 써주는 게 못마땅하게 느껴질 수도 있겠지만, 자바 출시 당시 모토는 Code once, Run everywhere 이다. 게다가 애플은 Big Sur 인 MacOS 11부터 차근차근 OpenGL 흔적을 제거하고 있으며, 애플답게 뒤도 안 돌아보고 갑자기 빠르게 OpenGL 영역이 완전히 사라질 것이기 때문에, 그 때 되면 OpenGL 구동 앱은 아예 호환이 안되는 불상사가 생긴다. 그렇기 때문에 자바는 이 모토를 지키기 위해 불공정하지만 지원했던 플랫폼은 끝까지 지원해줘야 하기에 하는 거니 이해를 해주길 바란다.

유사난수 생성기 향상 (JEP-356)

자, 이제 자바스러운 기능 향상으로 넘어가도록 한다. 라고 하기엔 아쉽지만 이게 마지막이다.
향상된 난수 생성기 클래스인 RandomGenerator 클래스가 추가된다.
유사난수 개념은 검색하거나 한국어 위키백과 에 간략하게 실려 있다.
컴퓨터공학 및 기계공학, 암호학 등의 공부 해본 사람이라면 알겠지만 의외로 기계 난수는 예측이 가능하다. 난수가 예측이 가능하면 어떻게 될 지는 상상에 맡기겠다. 유사난수는 기존 난수에 기준(Seed)을 정해서 그 기준을 모르는 자가 예측할 수 없어야 하는 요구사항에 부응하는 난수 생성기. 이를 자바에서 직접 지원하는 기능이다. 보안에는 중요하기 때문에 암호화 측면에서 상당히 유용한 기능이라 할 수 있다.

자바 17은 이들을 포함하여 자바 14~16까지 있었던 새 기능까지 안정화되어 출시하는 것을 목표로 삼고 있다. 물론 Preview에서 안정화되지 못해 아쉬운 API가 있을 수도 있다. 현재 Preview 중인 대표적인 기능이 레코드(Records), 봉인 클래스(Sealed Class), 외부 메모리 접근 API(Foreign-Memory Access API) 등이 있는데, 자바 생태계 특성 상 이들이 완전히 구현하지 못해도 보수적인 자바 생태계에는 전혀 지장이 없기 때문에 걱정할 게 없다는 게 내 생각이다.
대표적인 예로, 프로젝트 직쏘는 자바 7 목표였는데 9가 되어서야 출시했다. 물론 이 직쏘를 재대로 활용하는 자바 개발자는 손에 꼽겠지만.

올 가을이 기대되는군. 자바 17과 닷넷 6이 나올 시기니까.

Top comments (2)

Collapse
 
blue0skies profile image
blue0skies • Edited

레코드와 봉인 클래스의 경우에는 포함된거 아닐까요?
openjdk.java.net/jeps/395
openjdk.java.net/jeps/409
며칠 안 남았네요 자바 17 기대하고 있습니다 ^^
(글쓰신 시점 이후에 Delivered 로 바뀐 모양입니다 ㅎㅎ)

Collapse
 
composite profile image
Composite

지금 보니 레코드는 16에 이미 포함됐고, 봉인 클래스는 드디어 Preview 딱지 뗐네요. 정보 감사합니다. 내일 새벽입니다. 저는 초창기 준비중인 프로젝트에 적용할 생각입니다. 어자피 오래걸릴 프로젝트라... 산출물 나와야 하는 프로젝트는 기존 버전 유지해야죠.