java17 & SpringBoot3.0
2021년 9월 java 17이 새로 나왔다 (LTS버전 - Long-term support)
java 11과 비교해서 70가지 이상의 JEP가 더 추가되었다고 한다. *JEP : JDK 개선제안, JDK Enhancement Proposals
SrpigngBoot 3.0부터는 JDK 17 이상을 지원한다.
그리고 이제 spring initializr에서 boot 3.0부터 지원한다!!!
그래서 java 17과 springboot 3.0에 대해서 살펴보려고 한다.
java17의 주요 개선사항
- Collection Factory Method강화
- Var keyward 등장
- String에 신규 메소드 추가
- 텍스트 블록 기능 추가
- Switch표현식 기능향상
- Record Data class추가
- Sealed클래스
- Stream.toList()기능 추가
그 외에도 이러한 기능들이 추가되었다.
- 난수 생성기(Pseudo-Random Number Generator)의 새 인터페이스가 나옴
- Apple 메탈 API를 사용하는 Mac OS용 java 파이프라인을 구현
- instance of의 내부 캐스팅 과정을 내부에서 지원할 수 있도록 변경
- NumberFormat클래스 에 getCompactNumberInstance메소드 추가
- DateTimeFormatter에 패턴 Method 형식 추가("B")
Collection Factory Method 강화
Set, List, Map 인터페이스에 Immutable하게 생성할 수 있는 새로운 메서드가 추가되었다.
데이터 CRUD가 필요할 경우 아래처럼 한번 감싸주면 된다.
로컬 변수 타입 추론 “var”
- “타입 추론”을 이용하여 명시적 타입 선언 없이도 변수 선언이 가능하도록 지원하는 신규 Keyword
- JDK10에서 등장, JDK11에서부터 람다에서 사용 가능
- 가독성 높은 코드 작성을 위해 무분별한 “var” Keyword 이용은 지양하는 것이 좋다.
- 멤버 변수 또는 Method 파라미터로 선언은 불가능하며, 오로지 Method 내 로컬 변수로만 선언 가능
신규 문자열 Method 추가
- isBlank: 문자열이 비어있거나 공백이면 True 반환
- lines: 줄 단위로 나뉘어 있는 문자를 배열로 반환
- strip: 문자열 공백 제거
(기존 “trim()”이 ‘\u0020’ 이하 공백만을 제거 하였다면, “strip()”은 유니코드의 공백들을 전부 제거) - stripLeading: 문자열 앞의 공백을 제거
- stripTrailing: 문자열 뒤의 공백을 제거
- repeat: 문자열을 파라미터로 주어진 수 만큼 반복
텍스트 블록
“”” {String 문자열 } “””
Switch 표현식 기능 향상
- Case문 람다식 지원.
- Switch문 값 직접 반환
- 새로운 switch 표현식에는 break를 사용할 수 없으며 사용할 경우 컴파일 에러
- yield 예약어 이용한 값 리턴 방식 추가.
Record Data Class 추가
- JDK 14 버전부터 공개된 Immutable 객체를 생성하는 새로운 유형의 클래스
- Record 선언을 하게 되면 기존 toString, equals, hashCode 메소드를 자동으로 구현해주며, 모든 인스턴스 필드를 초기화해주는 생성자가 생성이 된다.
- DTO와 같은 Data Object 용도로 활용 시 보다 편리하고 간결하게 구분할 수 있다.
- Immutable 객체. 모든 값은 생성자를 통해 설정
- getter는 getXXX() 가 아닌, XXX()를 사용. member.name
- ModelMapper 사용불가. (setter가 없음.)
- 모든 필드가 final로 선언. 직접 setter만들 수 없음.
- 상속 불가
- 모든 필드는 “private final ,,”로 선언이 되기에
- Record라는 추상클래스를 상속받아 구현됨. 상속은 하나만 가능.
- 물론 Record객체에 객체가 포함되어있으면 그 객체는 mutable할 것. 그객체까지 immutable해야 완전한 immutable.
Sealed Class 추가
sealed는 봉인된이라는 뜻이다.
- Sealed Class/Interface 는 상속하거나(extends), 구현(implements) 할 클래스를 지정해두고, 해당 클래스들만 상속/구현이 가능하도록 제한하는 기능
- Sealed의 Sub-class는 sealed, non-sealed, final중 하나로만 선언되어야 한다.
Stream.toList() 추가
- collect(Collectors.toList()) 는 ArrayList를 반환한다.
- toList()는 UnmodifiableList를 반환한다. modify가 불가능.
다음 포스트에서는 spring 3.0의 변화에대해 알아보겠다.
2024.01.11 - [Spring] - [springboot] springboot 3.0의 새로운 점!
[springboot] springboot 3.0의 새로운 점!
SpringBoot 3.0의 개선사항 언젠가부터 Spring Initializr에서 spring 3.0부터만 지원하게 되었다... 그래서 이번 포스트에서는 springboot 3.0에 대해서 알아보도록 하겠다. 참고로 springboot는 java 17이상을 지원
wouldyou.tistory.com
'java' 카테고리의 다른 글
[java] Variable used in lambda expression should be final or effectively final, 람다 캡처링 (0) | 2023.12.08 |
---|---|
[java] lambda를 이용해 callback 구현하기 (0) | 2023.07.28 |
[java] 익명클래스 (0) | 2023.04.05 |
[java] 코드 실행시간 측정하기 (0) | 2023.03.31 |
[java] List, Map에서 유용하지만 생소한 함수 정리 (0) | 2023.03.24 |