Java 17
- 2021년 릴리즈
- 애플 M1 및 이후 프로세서 탐재 제품군에 대한 정식 지원
- 2029년 9월까지 지원합니다.
- Spring Boot 3.2.x, Spring Framework 6.0.x, 6.1.x
Java 17 을 선택한 이유
- Spring Boot 3.0 버전부터는 java 17 이상을 지원합니다.
- 가비지 컬렉션 알고리즘이 개선되어 메모리 관리 효율이 향상되었습니다. -> ZGC가 JDK15부터 정식으로 인정되어 반영되었습니다.
- 패턴 매칭, 레코드, Sealed 클래스 등과 같은 새로운 언어 기능이 도입되어 개발자들의 생산성이 향상되었습니다.
추가된 기능
1. 향상된 의사 난수 생성기
- 이전 버전의 JDK: 여러 클래스의 의사 난수 생성기가 있지만, 공통 인터페이스가 없어 다른 생성기 구현 클래스로 교체하기 어려웠습니다.
Random random = new Random();
int number = random.nextInt(10);
- 새로운 인터페이스인 RandomGenerator가 모든 기존 및 새 생성기에 대해 균일한 API를 제공합니다.
- 새로운 난수 생성기를 구현한 클래스를 제공합니다. ex) SplittableRandom, Xoroshiro128Plus, L64X128MixRandom
- 더 예측하기 힘든 안전한 난수를 생성할 수 있게 되었습니다.
RandomGenerator generator = RandomGenerator.getDefault(); //default 생성기를 선택
generator = RandomGeneratorFactory.of("Xoroshiro128PlusPlus").create(); // 특정 알고리즘 선택
// 난수 생성
int randomInt = generator.nextInt();
2. 텍스트 블록 기능 추가
- Java 문자열을 보다 가독성 있게 작성되도록 도와줍니다.
String html2 = """
<html>
<body>
<p>Hello, world</p>
</body>
</html>
""";
3. Record Data class 추가
- 불필요한 코드를 제거하고 적은 코드로 명확한 의도를 표현할 수 있습니다.
- 모든 필드는 불변
- final 클래스
- 주로 dto에 사용
- 메서드 자동 생성 : equals(), hashCode(), toString()
- 생성자 자동 생성
@Builder
public record FoodDto(
String name,
LocalDate expirationDate,
long ftypeId,
String qrId
) { }
4. 봉인 클래스(Sealed Class) 정식 추가
- 상속하거나, 구현할 클래스를 지정해 두고, 해당 클래스들만 상속 또는 구현을 허용하는 키워드로, 어떤 클래스가 해당 클래스를 상속 또는 구현했는지를 쉽게 알 수 있고 제한할 수 있습니다.
public sealed class Shape permits Circle, Square {
}
public final class Circle extends Shape {
}
public final class Square extends Shape {
}
5. Switch에서 패턴 매칭 (Preview)
- Object Type에 따라 분기가 가능합니다.
- Null 값에 대한 처리가 가능합니다.
- 다수의 매칭조건을 명시할 수 있습니다.
- 타입 매칭 후 추가적인 논리 조건 삽입이 가능합니다.
switch(o) {
case null -> "null";
case Integer i -> String.format("%d", i);
case Long l -> String.format("%d", l);
case Double d -> String.format("%f", d);
case String s -> String.format("%s", s);
default -> o.toString();
}'BackEnd > Java' 카테고리의 다른 글
| [Java] Java 21 특징 (3) | 2024.07.15 |
|---|---|
| [Java] Java 11 특징 (0) | 2024.06.21 |
| [Java] Java 8 특징 (0) | 2024.06.21 |
| [Java] Virtual Thread (0) | 2024.06.06 |