자바 17이 다가오면...

composite

Composite

Posted on April 16, 2021

자바 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이 나올 시기니까.

💖 💪 🙅 🚩
composite
Composite

Posted on April 16, 2021

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related