개발/자바
Java 21의 새로운 기능
피터JK
2025. 2. 27. 12:01
728x90
Java 21은 장기 지원(LTS) 릴리스로, 성능 개선과 새로운 기능들이 대거 추가되었습니다.
이번 릴리스에서 주목할 만한 기능들을 살펴보겠습니다.
1. 패턴 매칭 개선 (Pattern Matching)
1.1. Record Patterns (JEP 440, 441)
- record 타입의 데이터를 더 쉽게 분해할 수 있도록 개선되었습니다.
- switch 문과 함께 활용하면 더욱 간결한 코드 작성이 가능합니다.
record Point(int x, int y) {}
static void printPoint(Object obj) {
switch (obj) {
case Point(int x, int y) -> System.out.println("Point at (" + x + ", " + y + ")");
default -> System.out.println("Not a point");
}
}
1.2. Unnamed Patterns & Variables (JEP 443)
- 사용하지 않는 변수에 _를 사용하여 코드를 간결하게 만들 수 있습니다.
record Data(String name, int age) {}
void process(Data data) {
if (data instanceof Data(String _, int age)) {
System.out.println("Age: " + age);
}
}
2. 문자열 관련 개선
2.1. String Templates (JEP 430, Preview)
- 문자열 보간(interpolation)을 지원하여 가독성과 성능을 개선할 수 있습니다.
String name = "Java";
int version = 21;
String message = STR."Welcome to \\{name} \\{version}!";
System.out.println(message); // "Welcome to Java 21!"
3. 가비지 컬렉터(GC) 개선
3.1. ZGC 및 G1GC 성능 향상
- Java 21에서는 ZGC 및 G1GC의 성능이 향상되어 메모리 사용과 GC 시간이 줄어들었습니다.
4. Virtual Threads (가상 스레드) - JEP 444
- Java 21에서는 가상 스레드(Virtual Threads)가 정식으로 도입되었습니다.
- Thread.ofVirtual()을 사용하여 가볍고 효율적인 스레드를 생성할 수 있습니다.
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
IntStream.range(0, 10).forEach(i -> executor.submit(() -> {
System.out.println("Task " + i + " running on " + Thread.currentThread());
}));
}
5. Sequenced Collections (JEP 431)
- List, Set, Map 인터페이스에 순서 기반 메서드가 추가되었습니다.
- 새로운 메서드: first(), last(), reversed()
SequencedSet<String> set = new LinkedHashSet<>();
set.add("A");
set.add("B");
set.add("C");
System.out.println(set.first()); // A
System.out.println(set.last()); // C
6. Scoped Values (JEP 446, Preview)
- 스레드 간 안전한 데이터 공유를 위한 ScopedValue API 도입.
static final ScopedValue<String> USER = ScopedValue.newInstance();
void process() {
ScopedValue.where(USER, "Alice").run(() -> {
System.out.println("User: " + USER.get());
});
}
7. 외부 함수 및 메모리 API (JEP 454)
- JNI(Java Native Interface) 없이 네이티브 코드를 호출할 수 있는 API 지원.
try (Arena arena = Arena.ofConfined()) {
MemorySegment segment = arena.allocate(100);
// 네이티브 메모리 할당 및 활용 가능
}
결론
Java 21은 성능 향상, 가독성 개선, 멀티스레딩 최적화 등 다양한 면에서 큰 발전을 이루었습니다.
특히, 가상 스레드와 패턴 매칭의 발전이 개발 생산성을 크게 높여줄 것으로 기대됩니다.
728x90