JDK 17일 사용한 이유(feat. JDK 8 이후 훑어보기)
Last updated
Last updated
JDK 버전을 선택하면서 경험했던 내용들을 공유하고자 한다
JDK 11 버전은 23년에 개발을 시작한다면 당장 1년뒤에 서포트기간이 종료되었다
그래서 그나마 서포트 기간이 4년이나 길게 남아 있는 JDK 17이 안정적이라 판단했다
서포트 기간이 가장 중요한 이유였고 기능적으로는 사실 JDK 버전에서 신규 기능을 꼭 써야 한다는 기준은 없었다
최소 JDK 8에서 제공해주던 기능들만 있다면 별다른 어려움은 없다고 생각했다
다만 이번에 JDK 버전을 확인하면서 이전에 당연하게 써왔던 기능이나 모르고 있어서 사용하지 못했던 기능들이 있어서 적어보게 되었다
JAVA를 사용하는 개발자라면 보통 JDK 8 이전/이후 버전을 사용하는지를 일반적으로 이야기할 것이다
이렇게 JDK 8의 변화에서 가장 많은 영향을 주었던 것은 default method라고 생각한다
자세한 내용은 자바 8 인 액션
책에서 잘 설명해주고 있다
stream을 사용하여 목록형 데이터를 선언형으로 작성하여 더 간결하고 유연하게 처리할 수 있을 뿐만 아니라 병렬처리도 간편하게 구현할 수 있게 되었다
자바에서 가장 많이 발생하는 NPE를 예방할수 있도록 NULL에 대한 예외처리를 가능하게 해주었다
람다와 메서드 레퍼런스 또한 stream을 사용하면서 가장 많이 사용했던 기능이라 생각한다
JDK 9에서는 내가 가장 많이 사용하는건 List.of() 메서드이다
로직을 구현하다보면 데이터를 리스트로 치환하여 가공하는 경우가 있다
이때 나는 List.of를 사용하여 불변의 목록형 데이터를 만드는 편이다
물론 Arrays.asList()를 사용할 순 있지만 element을 mutable하게 사용할 수 있어서 지양하는 편이다
그 다음으로 많이 사용하는게 ifPresentOrElse
일것 같다
간혹 스트림에서 추출한 값이 필터링되어 존재하지 않을 경우 ifPresentOrElse
를 사용하여 예외처리가 가능한 데이터로 리턴하다보니 예측가능한 예외처리가 가능했다
JDK 10에서도 내가 특별하게 사용하는 기능은 없는것 같다
var 키워드를 사용해서 유형을 좀 더 확장성 있게 사용할 수 있다거나
그리고 성능적으로 Full GC가 병렬로 처리되어 성능적으로 개선이 되었다고 한다
jdk 12에서는 switch 문에서 다중 값들을 선언할 수 있게 지원되었다고 한다
JDK 14에서는 instanceof를 하면 자동으로 타입 캐스팅되어 사용할 수 있게 되었다
JDK 15에는 다중 문자열을 “””로 표현할 수 있도록 기능을 제공하였다
JDK14에서는 NPE가 발생할 경우 좀 더 사용자가 바로 확인할 수 있도록 개선되었다고 한다
JDK 15에서는 G1 GC의 힙 사이즈 계산을 기본보다 증가시켜 런타임 성능을 향상시켰다고 한다
또한, ZGC를 프로덕션에서도 사용할수 있다고 한다
JDK 16에서는 instaceof를 사용하면서 바로 해당 유형으로 타입캐스팅되어 사용할 수 있게 되었다
가장 큰 이유는 서포트 기간이다.
하지만 그외 다른 특징들도 있을것인데 조금이라도 사용할만한 기능은 없을지 살펴보자
seald class로 무분별한 상속을 제한할 수 있다
switch에서 유형으로 매칭시킬 수 있는 기능이 있다
record 유형을 사용해서 VO 객체를 만들 수 있다 (JDK 16에 소개되었지만 17 버전에서 공식적으로 추가되었다고 한다)
잘 사용하지는 않지만 그래도 어떤 기능들을 제공하는지 알고 사용하는건 필요하다고 생각한다