본문 바로가기
개발/Java

[Java] 자바 JDK 21 버전 특징

by devhooney 2023. 8. 31.
728x90

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

 

 

 

 

728x90

 

 

 

 

 

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/

 

728x90