728x90
반응형
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의 새로운 점!
728x90
반응형
'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 |