본문 바로가기
Back/Java

[Java/v17] JDK17 을 사용하는 이유

by SIXXXX_ 2023. 1. 8.
728x90

신규 버전 대비 : 기술 적응을 완료한 상태에서 전환 시 마이그레이션으로 인한 영향이 최소화될 것

다음 세대 플랫폼 호환 준비 : spring 3.0 이상부터 JDK 17이상을 지원한다.

이게 사용하는 이유가 제일 큰 듯하다.

https://spring.io/blog/2022/05/24/preparing-for-spring-boot-3-0

Spring Boot 3.0 will require Java 17, but you don’t need to wait until that release to upgrade to the latest LTS Java      version. Any recent Spring Boot 2.x release will work really well with Java 17. You can also make use of Java 17 features (such as records) in your own codebases.

 

 

JDK

  • JDK는 javac와 jre로 구성되어 있다. 
  • javac는 소스코드를 .class 파일로 변환(컴파일)해 주고, jre는 .class 파일을 실행시켜 준다.
  • JDK 8로 컴파일하면 상위 버전인 JDK 9, 10, 11 등과 호환되어 실행되지만 JDK 6, 7은 실행되지 않는다. 
  • 이를 backward compatible이라고 한다.
  • GA(General Availability)는 필요한 모든 상업화 활동이 완료되어 웹이나 물리 매체를 통해 시장에서 이용할 수 있게 됨을 의미한다

 

JDK 11 (

+ New Garbage Colletor, ZGC 추가  https://github.com/openjdk/zgc

 

GitHub - openjdk/zgc: The Z Garbage Collector https://wiki.openjdk.org/display/zgc

The Z Garbage Collector https://wiki.openjdk.org/display/zgc - GitHub - openjdk/zgc: The Z Garbage Collector https://wiki.openjdk.org/display/zgc

github.com

  • 대기 시간이 짧은 Application에 적합한 Garbage Collection입니다.
  • Thread가 실행 중일 때 동시 작업을 수행하기에 모든 작업을 동시에 수행합니다. (병렬 처리)
  • 처리 시간이 10ms를 초과하지 않아 짧은 지연시간을 보장합니다.
  • 8MB부터 16TB까지의 Heap 크기를 지원합니다.

+ Thread-Local Handshakes : Thread 개별로 중단 가능

+ jlink : JRE를 생성해주는 도구

+ JShell : 메인 Method 없이 자바 코드를 넣고 즉석에서 실행 가능한 도구

+ Collection Factory Method 기능 강화 : List, Set, Map 인터페이스에 immutable생성을 할 수 있는 새로운 method 추가

+ interface, private method 도입 : 인터페이스 내 private Method 사용 가능

+ HTML5 Javadoc : javadoc 생성 시, 이전에는 HTML4 형식을 사용하였으나 , JDK 9부터는 HTNML5 마크업으로 생성이 가능하다.

+ 로컬 변수 타입 추론 : 로컬 변수 선언시 "타입 추론"을 이용한 명시적 타입 선언이 없얻호 변수 선언이 가능한 "var" 키워드 추가

+ 신규 문자열 Method 추가 : isBlank, lines, strip, stripLeading, stripTrailing, repeat 등 신규 String Method 추가

+ Reactive Stream : Non-Blocking Backpressure를 이용한 비동기 스트림 처리 지원 API 추가(https://www.baeldung.com/spring-webflux)

  • Project Reactor와 Publisher 구현을 위해 “Flux/Mno” 클래스를 사용합니다.
    • Spring Webflux: 기존 Servlet API를 기반으로 한 HTTP API가 아닌 Reactive Stream기반 통신을 지원하는 Spring MVC 모듈

JDK 17 (https://openjdk.org/projects/jdk/17/)

+ 텍스트 블록 기능 추가 : 기존 String 을 여러 줄 작성할 때 사용 가능한 기능, 가독성 있는 코드 지원

+ Record Data class : immutable 객체를 생성하는 새로운 유형의 클래스로 기존 toString, equals, hashCodeMethod 에 대한 구현을 자동 제공

+ Switch 표현식 기능 향상 : Switch 문 이용시 값을 반환하여 이용 가능하며, 람다 스타일 구문을 사용가능

+ Instanceof 매칭 : 이전 버전 경우 Instanceof 내부에서 객체를 캐스팅 하는 과정이 필요했으나 캐스팅 과정을 내부에서 지원할 수 있도록 변경

+ DateTimeFormatter 클래스 기능 향상 : 기존 날짜 Format 클래스 내 패턴 Method 형식 추가 ("B")

+ Stream.toList()기능 추가 : 기존 Stream 을  List 로 변환 시 Colleloters 에서 기능을 찾아 사용했다면 Java 17부터는 Colletors 호출 없이 toList()만으로 변환이 가능하다.

 

 

 

다운 >> https://jdk.java.net/17/

 

 

Reference