https://openjdk.org/projects/jdk/21/
JDK 21이 나옴에 따라 변경점에 대해서 알아보겠습니다.
Java 18
JEP 400: UTF-8 by Default
- Java APi의 Default Charset이 UTF-8로 변경되었습니다.
JEP 408: Simple Web Server
- simple webserver를 제공합니다.
$ jwebserver -p 9000
JEP 420: Pattern Matching for switch (Second Preview)
- Java 17에서 Preview 되었던 switch의 Pattern Matching의 preview의 2번째 preview입니다.
Java 19
JEP 405: Record Patterns (Preview)
- Switch Pattern과 더불어 Record 또한 Patterns을 사용할 수 있습니다.
record Point(int x, int y) {}
void printSum(Object o) {
if (o instanceof Point(int x, int y)) {
System.out.println(x+y);
}
}
JEP 425: Virtual Threads (Preview)
- JDK21에서 출시되는 Virtual Thread의 Preview 버전이 공개되었습니다.
JEP 428: Structured Concurrency (Incubator)
- 멀티스레드 코드의 유지 관리성, 신뢰성 및 관찰 가능성을 향상 시키기 위한 작업이 진행되었습니다.
Java 20
JEP 429: Scoped Values (Incubator)
- Thread 내에서 그리고 Thread 간에 불변 데이터를 공유할 수 있는 범위 값을 도입합니다.
Java 21
JEP 439: Generational ZGC
- Generational ZGC를 제공합니다.
ZGC를 확장하여 young obejcts와 old objects에 대해 별도의 generation을 유지함으로써 성능을 향상 시킵니다.
java -XX:+UseZGC -XX:+ZGenerational
JEP 430: String Templates (Preview)
- 강화된 String을 제공합니다.
StringBuilder의 repeat를 통해 반복이 가능하며, String에서 이모지 판단이 가능합니다.
package bootiful.java21;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
class StringsTest {
@Test
void repeat() throws Exception {
// ①
var line = new StringBuilder()
.repeat("-", 10)
.toString();
Assertions.assertEquals("----------", line);
}
@Test
void emojis() throws Exception {
// ②
var shockedFaceEmoji = "\uD83E\uDD2F";
var cp = Character.codePointAt(shockedFaceEmoji.toCharArray(), 0);
Assertions.assertTrue(Character.isEmoji(cp));
System.out.println(shockedFaceEmoji);
}
}
JEP 431: Sequenced Collections
- Collection에 대한 새로운 인터페이스가 도입되었습니다.
package bootiful.java21;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.util.LinkedHashSet;
import java.util.SequencedCollection;
class SequencedCollectionTest {
@Test
void ordering() throws Exception {
var list = LinkedHashSet.<String>newLinkedHashSet(100);
if (list instanceof SequencedCollection<String> sequencedCollection) {
sequencedCollection.add("ciao");
sequencedCollection.add("hola");
sequencedCollection.add("ni hao");
sequencedCollection.add("salut");
sequencedCollection.add("hello");
sequencedCollection.addFirst("ola"); //<1>
Assertions.assertEquals(sequencedCollection.getFirst(), "ola"); // ②
}
}
}
- 가상 Thread가 도입되었습니다. Virtual Thread는 경량 Thread 입니다.
try {
Thread.Builder builder = Thread.ofVirtual().name("MyThread");
Runnable task = () -> {
System.out.println("Running thread");
};
Thread t = builder.start(task);
System.out.println("Thread t name: " + t.getName());
t.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
'개발 > JAVA' 카테고리의 다른 글
Java 12-17 변경점 (0) | 2021.10.03 |
---|---|
[6주차] 입출력 스트림 요약 정리 (0) | 2020.03.14 |
[5주차] 직접 정리한 키워드 공유하기 - 혼자 공부하는 자바 (0) | 2020.03.08 |
[4주차] 직접 해보는 손코딩! Thread (0) | 2020.02.29 |
[3주차] 혼공 용어노트 활용 (0) | 2020.02.22 |
댓글