이번 프로젝트에서 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확장제어를 제공한다.
다음과 같은 기능을 더욱 알고싶으시면 다음 참고문헌을 확인해보시기 바랍니다.
참고 문헌:
'자바' 카테고리의 다른 글
[프로그래머스, 실무역량과제] API 서버 개발 (7) | 2023.04.12 |
---|---|
자주 쓰는 디자인 패턴 (행위 패턴) (0) | 2023.03.23 |
자주 쓰는 디자인 패턴 [구조 패턴] (0) | 2023.03.22 |
자주쓰는 디자인 패턴 총정리 (생성 패턴 편) (1) | 2023.03.21 |
정규표현식(REGEX) 문법 정리 (1) | 2022.12.24 |