생각정리

Java LTS 버전별 특징에 대한 내 생각

puy0 2023. 7. 31. 06:16

LTS인 8, 11, 17 에 대해

내가 중요하게 생각하는것들만

정리 해봤다

 

Java 8

람다 표현식 / 디폴트 메서드 (인터페이스) / static 메서드 (인터페이스)

 

Java 11

HTTP 클라이언트 업데이트 / 향상된 접근 제한자 (var)

 

Java 17

swith 문 개선 / ARM 아키텍쳐 지원 (M1 macOS )

 

 

Java 8 -

인터페이스의 기능 확장

디폴트 메서드와 스테틱 메서드 모두 인터페이스를 확장하거나 개선하는 요소라고 생각한다

인터페이스는 오래전부터 있었지만 Java8에서 인터페이스에 대한 업데이트가 있다는건

Java8 즈음 부터 인터페이스에 대한 개선이 필요했던것이 아닐까 생각한다

 

Java11 -

HTTP 클라이언트 확장

HTTP2와 websocket 에 대한 내용 이다

HTTP 1.1 프로토콜중 기존의 비동기 요청은 외부 라이브러리를 사용해서 처리하는것을

개선된 HTTP 클라이언트 API에서 요청 할수 있고 webSocket 또한 지원 한다

webSocket을 사용해본적이 없어 알아봤다

기존의 내가 사용하는 HTTP 요청은 동기, 비동기 상관 없이

한번의 요청이 끝나면 연결이 끊어지지만 webSocket의 경우 계속 연결을 유지하기때문에

채팅, 게임서버 등등 실시간 양방향 통신에 적절한 서비스에 주로 사용 한다

구현 방법은 프론트 에서 이벤트가 발생하면  WebSocket의 메서드 open(), close()를 사용한다

+

그리고 간단하게 변수 선언부를 구현 할수있도록 var를 사용할수 있도록 했다고 하는데

변수의 의도를 알수 있는 변수명도 중요하지만 해당 변수의 데이터타입이 명시 되어야 가독성이 좋다고 생각하는데

내가 미숙해서 그런걸지도 모르겠다

 

 

Java17 -

ARM 아키텍처 지원

M1 macOS에 대한 호환성 지원 이다

Java 는 어차피 JVM 에서 돌아가기 때문에 어디에서나 잘 동작하는것이 특징이라고 알고 있는데

mac 에 대한 추가적인 지원이 필요한가 싶었다

그래서 공식문서를 찾아 봤지만

JDK를 포팅 할때 리눅스에서 사용하던 AArch64 포트를 응용한다는것 외에

정보를 찾지 못했다

혼자 추축하기론 아키텍처에 맞게 JDK가 수정 되기때문에

JVM또한 최적화가 되는것이아닐까 추측만 해본다..

+

Switch문 개선

화살표를 사용하고 break를 생략하면서 깔끔한 코드를 만들수 있게 되었다

오라클 홈페이지 - Java Language Updates 부분 캡쳐

 

 

 

Java8 에서 사용할수 있는 인터페이스의 확장용 메서드들은 상위 버전에서 여전히 사용할수 있고

Java11 에서 지원하는 통신방식은 순수Java에서 사용할때 더욱 간편하더라고 나는 Spring 을 사용할것이기 때문에

macOS와 호환성이 좋은 Java17 을 선택하는것이 합당하다고 판단 했다

 

+

하지만 로컬에서 구현,테스트하기에는 좋으나,

완성된 서버를 배포할때는 리눅스에서 돌아가기 때문에

서버의 성능향상을 기대하는것보다

로컬환경에서의 조금더 쾌적한 실행에 기대 해야 한다

 

 

 

 

 

 

 

11 버전

 

오라클 릴리즈 노트

https://www.oracle.com/java/technologies/javase/11u-relnotes.html

 

Java Development Kit 11 Release Notes

We’re sorry. We could not find a match for your search. We suggest you try the following to help find what you’re looking for: Check the spelling of your keyword search. Use synonyms for the keyword you typed, for example, try "application" instead of

www.oracle.com

HTTP 클라이언트 ,웹소켓 지원

https://openjdk.org/jeps/321

 

JEP 321: HTTP Client

JEP 321: HTTP Client OwnerChris HegartyTypeFeatureScopeSEStatusClosed / DeliveredRelease11Componentcore-libs / java.netDiscussionnet dash dev at openjdk dot java dot netEffortMDurationMRelates toJEP 110: HTTP/2 Client (Incubator)Reviewed byAlan Bat

openjdk.org

 

 

 

17 버전

 

오라클 블로그

https://blogs.oracle.com/javakr/post/java-17-webcast-brief

 

Java 17 - Webcast (내용정리)

앞서 블로그에서 설명 드렸듯이, 지난 19일 새벽 Java 17에 대한 Webcast가 있었습니다. Java 17 - Webcast 오늘은 Java 17의 기능 변화들, 즉 이 Webcast에서 나온 내용을 번역, 정리, 요약해서 설명 드리도록

blogs.oracle.com

 

 

 

switch

https://openjdk.org/jeps/406

 

JEP 406: Pattern Matching for switch (Preview)

JEP 406: Pattern Matching for switch (Preview) Summary Enhance the Java programming language with pattern matching for switch expressions and statements, along with extensions to the language of patterns. Extending pattern matching to switch allows an expr

openjdk.org

https://docs.oracle.com/en/java/javase/17/language/switch-expressions.html#GUID-BA4F63E3-4823-43C6-A5F3-BAA4A2EF3ADC

친절한 공식문서

 

Java Language Updates

Like all expressions, switch expressions evaluate to a single value and can be used in statements. They may contain "case L ->" labels that eliminate the need for break statements to prevent fall through. You can use a yield statement to specify the value

docs.oracle.com

 

 

macOS 아키텍처 지원

https://openjdk.org/jeps/391

 

JEP 391: macOS/AArch64 Port

JEP 391: macOS/AArch64 Port AuthorsAnton Kozlov, Vladimir KempikOwnerVladimir KempikTypeFeatureScopeJDKStatusClosed / DeliveredRelease17ComponenthotspotDiscussionaarch64 dash port dash dev at openjdk dot java dot netEffortMDurationMDependsJEP 388: Wind

openjdk.org