자바

JDK 11 vs JDK17 무엇이 업그레이드 되었을까?

류창 2022. 9. 3. 18:13
반응형

 

 

이번 프로젝트에서 JDK17 을 사용하기로 하였다.

 

JDK17 무엇이 업그레이드 되었을까?

 

이 포스팅은  본인이 느끼기에 JDK17에서  확연히 바뀐 기능을 정리해보겠다.

 

1. 텍스트 블록

예시로 JDK11에서 JSON데이터를 입력할때다.  

 

JSON데이터를 만들어서 전송하기위해선 다음 사진과같이 번거로운 문자열 연결을 해야만한다.

 

JDK17 에선 이를 해결하기위한  새로운 문법 """ (큰따옴표 3개) 를 지원한다.

 

 

마치 타임리프(Thymeleaf)에  리터럴과  같은 기능을 처리한다.

 

"""    """ 사이에  내가 보내고싶은 데이터형식을 자유롭게 작성하고 보낼수있다.

 

다음과같은 String을 출력한다.

 

 2.스위치 문법 개편

 

 

다음과 같은 switch 문에서   APPLE를 호출하면 다음과같은 코드가 출력된다.

 

 

그렇다. Switch문에서  Break를 까먹고 안써준것이다. 

 

이것이 되게 공감되는게   If 문을 쓰다가  Switch문을 사용하면 Break를 빼먹는게 대다수 일어난다.

 

 

그래서 break문을 제대로 작성을 하였다.

 

근데 JDK17 이 보기엔 이 코드가 깔끔해보이지 않아보인다.  JDK18은 다음과 같이 개선하였다.

 

break를   람다식  -> 으로  변환하였다.     여기서  System.out.println 코드도 중복이되니  다음과 같이

더욱 깔끔하게 만들수도있다.

 

 

break와 sout 의 중복을 피하고,  가독성이좋은 코드의 완성이다.

 

또는 이렇게도 작성이가능하다.

 

 

3.Stream.toList()의 간결화

 

 

Stream에서 자주 쓰이는 코드인  collect(Collectiors.toList()) 코드를 간결하게 바뀌었다.

 

개발자들이 아주 많이 쓰는걸 아셧는지,

이젠 toList()로 간결하게 사용할수 있도록 추가되었다.

 

 

4. NPE (NullPointerException) 의 원인 제공

 

다음 코드가 있다고 가정하자

public static void main(String[] args) {
    HashMap<String, GrapeClass> grapes = new HashMap<>();
    grapes.put("grape1", new GrapeClass(Color.BLUE, 2));
    grapes.put("grape2", new GrapeClass(Color.white, 4));
    grapes.put("grape3", null);
    var color = ((GrapeClass) grapes.get("grape3")).getColor();
}

 

다음과 같은 코드를 실행한다면, grape3에 없는 value(Null)를 참조 하여  JDK11은 다음과같은 에러가 뜬다.

 

Exception in thread "main" java.lang.NullPointerException
        at com.mydeveloperplanet.myjava17planet.HelpfulNullPointerExceptions.main(HelpfulNullPointerExceptions.java:13)

 

기존 JDK11을 사용하면  이런 NPE에러를 보면   지금까지 작성한 코드중  NPE에러를 표출한 코드가 있는지

 

검토 및 추리를 해야하는 고통이 따른다..

 

다음과 같이 JDK17 부턴  그 원인을 알려준다

Exception in thread "main" java.lang.NullPointerException: Cannot invoke "com.mydeveloperplanet.myjava17planet.GrapeClass.getColor()" because the return value of "java.util.HashMap.get(Object)" is null
    at com.mydeveloperplanet.myjava17planet.HelpfulNullPointerExceptions.main(HelpfulNullPointerExceptions.java:13)

 

디버깅, 오류잡는데 시간을 단축할수있다!

 

 

그외 :

 

그외로   Number, Date 자동 국제화 기능 , 새로운 extend확장제어를 제공한다.

 

다음과 같은 기능을 더욱 알고싶으시면 다음 참고문헌을 확인해보시기 바랍니다.

 

 

참고 문헌:

https://signalfix.net/ko/java-11%EA%B3%BC-java-17-%EC%82%AC%EC%9D%B4%EC%9D%98-%EC%83%88%EB%A1%9C%EC%9A%B4-%EA%B8%B0%EB%8A%A5%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C 

 

Java 11과 Java 17 사이의 새로운 기능은 무엇입니까? - SignalFix.net

9월 14일 Java 17이 릴리스되었습니다. 마지막 LTS 릴리스인 Java 11 이후의 변경 사항을 자세히 살펴볼 시간입니다. 라이선스 모델에 대해 간략히 소개한 후 Java 11과 Java 17 간의 변경 사항 중 일부를

signalfix.net

 

반응형