JDK 21이 2023년 9월 19일에 릴리즈될 예정이다.
- String Templates (Preview) [JEP-430]
- Sequenced Collections [JEP-431]
- Generational ZGC [JEP-439]
- Record Patterns [JEP-440]
- Pattern Matching for switch [JEP-441]
- Foreign Function & Memory API (Third Preview) [JEP-442]
- Unnamed Patterns and Variables (Preview) [JEP-443]
- Virtual Threads [JEP-444]
- Unnamed Classes and Instance Main Methods (Preview) [JEP-445]
- Scoped Values (Preview) [JEP-446]
- Vector API (Sixth Incubator) [JEP-448]
- Deprecate the Windows 32-bit x86 Port for Removal [JEP-449]
- Prepare to Disallow the Dynamic Loading of Agents [JEP-451]
- Key Encapsulation Mechanism API [JEP-452]
- Structured Concurrency (Preview) [JEP-453]
JDK21이 가진 15가지 특징이다.
1. 가상 스레드
가상 스레드는 높은 처리량의 동시 애플리케이션을 작성하는 데 도움이 되는 JVM 관리 경량 스레드이다. 처리량은 주어진 시간 동안 시스템이 처리할 수 있는 정보 단위 수를 의미한다. Java 21에서는 가상 스레드가 프로덕션 용도로 준비되었다.
가상 스레드의 도입으로 몇 개의 운영 체제 스레드만 사용하여 수백만 개의 가상 스레드를 실행하는 것이 가능해졌다. 가장 큰 장점은 기존 Java 코드를 수정할 필요가 없다는 점이다. 필요한 것은 플랫폼 스레드 대신 가상 스레드를 활용하도록 애플리케이션 프레임워크에 지시하는 것뿐이다.
Java API를 사용하여 가상 스레드를 생성하려면 Thread 또는 Executors를 사용할 수 있다 .
Runnable runnable = () -> System.out.println("Inside Runnable");
//1
Thread.startVirtualThread(runnable);
//2
Thread virtualThread = Thread.ofVirtual().start(runnable);
//3
var executor = Executors.newVirtualThreadPerTaskExecutor();
executor.submit(runnable);
2. Sequenced Collections
Sequenced Collections 이니셔티브 에 따라 생성된 새로운 인터페이스는 정의된 만남 순서가 있는 컬렉션을 나타낸다. 순서는 잘 정의된 첫 번째 요소, 두 번째 요소 등을 거쳐 마지막 요소까지 지정된다. 인터페이스는 이러한 요소에 순서대로 또는 역순으로 액세스할 수 있는 균일한 API를 제공한다.
대중적이고 일반적으로 사용되는 모든 컬렉션 클래스는 이제 해당 컬렉션 유형에 따 java.util.SequencedCollection , java.util.SequencedSet 또는 java.util.SequencedMap 인터페이스도 구현한다.
새 인터페이스에는 요소에 대한 순차적 액세스를 지원하는 추가 메서드가 있다. 예를 들어 SequencedCollection 에는 다음과 같은 메서드가 있다.
interface SequencedCollection<E> extends Collection<E> {
// new method
SequencedCollection<E> reversed();
// methods promoted from Deque
void addFirst(E);
void addLast(E);
E getFirst();
E getLast();
E removeFirst();
E removeLast();
}
ArrayList<Integer> arrayList = new ArrayList<>();
addFirst.add(1); // [1]
arrayList.addFirst(0); // [0, 1]
arrayList.addLast(2); // [0, 1, 2]
arrayList.getFirst(); // 0
arrayList.getLast(); // 2
- Java 17
//arrayList.get(arrayList.iterator().next()); // first element
//arrayList.get(arrayList.size() - 1); // last element
3. Record 패턴
Java의 레코드는 투명하고 불변의 데이터 전달자이다(POJO와 유사).
record Point(int x, int y) {}
이전에는 레코드의 구성 요소에 액세스해야 하는 경우 다음과 같이 구조를 분해해야 했다.
if (obj instanceof Point p) {
int x = p.x();
int y = p.y();
System.out.println(x+y);
}
Java 21에서는 레코드 패턴Point(int x, int y) 이라는 구문을 사용하여 덜 장황한 방식으로 다시 작성할 수 있다 . 레코드 패턴은 추출된 구성 요소에 대한 지역 변수 선언을 제거하고 값이 패턴과 일치할 때 접근자 메서드를 호출하여 구성 요소를 초기화한다.
if (obj instanceof Point(int x, int y)) {
System.out.println(x+y);
}
계속 수정 예정..
- 출처
https://howtodoinjava.com/java/java-21-new-features/
'개발 > Java&Kotlin' 카테고리의 다른 글
[Java] Record 알아보기 (57) | 2023.09.20 |
---|---|
[Spring] Redirect, Forward 차이 (55) | 2023.09.18 |
[Java] 테스트가 어려운 코드 (11) | 2023.08.23 |
[Java] 자바 LTS 버전 별 특징 (7) | 2023.08.17 |
[Java] 자바로 테스트 코드 작성 순서 알아보기 (0) | 2023.07.24 |