자바

자바 21의 기능

thebasics 2024. 9. 17. 17:00

목차
1. 자바 21의 개요
2. 새로운 기능과 개선 사항 요약
3. Virtual Threads (정식 기능)
   - Virtual Threads의 개념과 정식 도입
   - 코드 예제
4. Pattern Matching for switch (정식 기능)
   - Pattern Matching for switch의 개념과 사용 방법
   - 코드 예제
5. Record Patterns (정식 기능)
   - Record Patterns의 개념과 사용 방법
   - 코드 예제
6. Sequenced Collections
   - Sequenced Collections의 개념과 사용 방법
   - 코드 예제
7. Unnamed Patterns and Variables (Preview)
   - Unnamed Patterns and Variables의 개념과 사용 방법
   - 코드 예제
8. String Templates (Preview)
   - String Templates의 개념과 사용 방법
   - 코드 예제
9. Foreign Function & Memory API (정식 기능)
   - FFM API의 개념과 사용 방법
   - 코드 예제
10. 기타 주요 변경 사항
11. 예제와 분석
12. 결론 및 추가 학습 자료


1. 자바 21의 개요

자바 21은 2023년 9월에 릴리스된 최신 LTS(Long-Term Support) 버전으로, 자바 생태계에 중요한 진전을 가져왔습니다. 이 버전에서는 자바 20까지 실험적으로 제공되었던 기능들이 정식으로 도입되었으며, 새로운 기능과 개선 사항이 추가되어 자바 개발자들이 현대적인 애플리케이션을 더욱 효율적으로 개발할 수 있게 되었습니다.


2. 새로운 기능과 개선 사항 요약

자바 21에서 추가된 주요 기능과 개선 사항은 다음과 같습니다:

- Virtual Threads (정식 기능): 가상 스레드가 정식 기능으로 도입되어 대규모 동시성을 쉽게 구현할 수 있는 기능.
- Pattern Matching for switch (정식 기능): 패턴 매칭을 통한 스위치문 처리 방식이 정식 기능으로 도입됨.
- Record Patterns (정식 기능): 레코드 패턴을 통해 객체의 구성 요소를 쉽게 매칭하고 처리할 수 있는 기능.
- Sequenced Collections: 순차적 컬렉션을 지원하여, 컬렉션 요소의 순서를 더 쉽게 다룰 수 있는 기능.
- Unnamed Patterns and Variables (Preview): 이름 없는 패턴과 변수를 지원하여 코드의 간결성을 높이는 기능.
- String Templates (Preview): 문자열 템플릿을 지원하여 문자열 내 변수 및 표현식의 삽입을 간편하게 하는 기능.
- Foreign Function & Memory API (정식 기능): 네이티브 코드와의 상호 운용성을 위한 FFM API가 정식 기능으로 도입됨.

이 외에도 다양한 성능 개선과 버그 수정이 포함되어 있습니다.


3. Virtual Threads (정식 기능)

Virtual Threads의 개념과 정식 도입

자바 21에서는 Virtual Threads가 정식 기능으로 도입되었습니다. 가상 스레드는 매우 경량의 스레드로, 기존의 스레드보다 훨씬 적은 리소스를 사용하면서도 대규모 동시성을 지원합니다. 이를 통해 개발자는 복잡한 비동기 코드 작성 없이도 동시성을 쉽게 관리할 수 있습니다.

코드 예제

Virtual Threads 사용 예제:

public class VirtualThreadsExample {
    public static void main(String[] args) throws InterruptedException {
        Thread thread = Thread.ofVirtual().start(() -> {
            System.out.println("Hello from a virtual thread!");
        });

        thread.join();
    }
}

설명:
- 'Thread.ofVirtual()' 메서드를 사용하여 가상 스레드를 생성할 수 있습니다.
- 자바 21에서는 가상 스레드가 정식 기능으로 도입되어, 더욱 안정적이고 효율적인 동시성 처리를 제공합니다.


4. Pattern Matching for switch (정식 기능)

Pattern Matching for switch의 개념과 사용 방법

자바 21에서는 Pattern Matching for switch가 정식 기능으로 도입되었습니다. 이를 통해 'switch' 문에서 다양한 패턴 매칭을 수행할 수 있으며, 코드의 가독성과 유지보수성이 크게 향상되었습니다.

코드 예제

Pattern Matching for switch 사용 예제:

public class PatternMatchingSwitchExample {
    public static void main(String[] args) {
        Object obj = 42;

        String result = switch (obj) {
            case Integer i -> "Integer: " + i;
            case String s -> "String: " + s.toLowerCase();
            case null -> "null";
            default -> "Unknown type";
        };

        System.out.println(result); // Integer: 42
    }
}

설명:
- 'switch' 문에서 패턴 매칭을 사용하여 객체의 타입에 따라 다른 처리를 수행할 수 있습니다.
- 자바 21에서는 이 기능이 정식으로 도입되어, 다양한 케이스에서 사용될 수 있습니다.


5. Record Patterns (정식 기능)

Record Patterns의 개념과 사용 방법

자바 21에서는 Record Patterns가 정식 기능으로 도입되었습니다. 이 기능은 레코드의 필드를 패턴 매칭으로 쉽게 추출하고, 레코드 데이터를 더욱 직관적으로 처리할 수 있게 합니다.

코드 예제

Record Patterns 사용 예제:

public record Point(int x, int y) {}

public class RecordPatternsExample {
    public static void main(String[] args) {
        Point point = new Point(10, 20);

        String result = switch (point) {
            case Point(int x, int y) -> "Point with " + x + " and " + y;
            default -> "Unknown point";
        };

        System.out.println(result); // Point with x = 10 and y = 20
    }
}

설명:
- Record Patterns를 사용하면 레코드의 필드를 패턴 매칭으로 쉽게 추출할 수 있습니다.
- 자바 21에서는 이 기능이 정식 기능으로 도입되어, 더욱 다양한 상황에서 사용할 수 있습니다.


6. Sequenced Collections

Sequenced Collections의 개념과 사용 방법

Sequenced Collections는 순차적인 접근이 필요한 컬렉션을 관리하기 위한 새로운 인터페이스입니다. 이 인터페이스를 구현하는 컬렉션은 요소의 순서를 쉽게 관리하고 처리할 수 있습니다.

코드 예제

Sequenced Collections 사용 예제:

import java.util.*;

public class SequencedCollectionsExample {
    public static void main(String[] args) {
        SequencedCollection<String> sequencedList = new ArrayList<>(List.of("A", "B", "C"));

        // 첫 번째 요소와 마지막 요소 출력
        System.out.println("First: " + sequencedList.getFirst()); // A
        System.out.println("Last: " + sequencedList.getLast()); // C

        // 요소 추가
        sequencedList.addLast("D");
        sequencedList.addFirst("Z");

        // 결과 출력
        System.out.println(sequencedList); // [Z, A, B, C, D]
    }
}

설명:
- Sequenced Collections 인터페이스를 구현한 컬렉션은 요소의 순서를 관리하는 메서드를 제공합니다.
- 자바 21에서는 이 기능이 새롭게 도입되어, 순차적인 데이터를 보다 쉽게 처리할 수 있습니다.


7. Unnamed Patterns and Variables (Preview)

Unnamed Patterns and Variables의 개념과 사용 방법

자바 21에서는 Unnamed Patterns and Variables가 미리보기 기능으로 도입되었습니다. 이 기능은 이름이 필요하지 않은 패턴이나 변수를 표현할 수 있으며, 이를 통해 코드의 간결성을 크게 향상시킬 수 있습니다.

코드 예제

Unnamed Patterns and Variables 사용 예제:

public class UnnamedPatternsExample {
    public static void main(String[] args) {
        Object obj = "Hello";

        if (obj instanceof String _) {
            System.out.println("This is a string!");
        }
    }
}

설명:
- 이름이 필요 없는 패턴이나 변수를 '_'로 표현하여 코드의 간결성을 높일 수 있습니다.
- 자바 21에서는 이 기능이 미리보기로 제공되며, 코드의 가독성과 유지보수성을 개선합니다.


8. String Templates (Preview)

String Templates의 개념과 사용 방법

자바 21에서는 String Templates가 미리보기 기능으로 도입되었습니다. 이 기능을 사용하면 문자열 내에 변수를 삽입하거나 표현식을 쉽게 포함할 수 있으며, 복잡한 문자열 조작을 간결하게 표현할 수 있습니다.

코드 예제

String Templates 사용 예제:

public class StringTemplatesExample {
    public static void main(String[] args) {
        int x = 10;
        int y = 20;

        String message = STR."The sum of \{x} and \{y} is \{x + y}.";

        System.out.println(message); // The sum of 10 and 20 is 30.
    }
}

설명:
- String Templates를 사용하여 문자열 내에 변수를 쉽게 삽입하고

 계산 결과를 포함할 수 있습니다.
- 자바 21에서는 이 기능이 미리보기로 제공되며, 문자열 조작을 더욱 직관적으로 수행할 수 있습니다.


9. Foreign Function & Memory API (정식 기능)

FFM API의 개념과 사용 방법

자바 21에서는 Foreign Function & Memory API (FFM)가 정식 기능으로 도입되었습니다. 이 API는 네이티브 메모리와 함수에 안전하게 접근할 수 있도록 도와주며, 외부 라이브러리와의 상호 운용성을 크게 향상시킵니다.

코드 예제

FFM API 사용 예제:

import jdk.incubator.foreign.MemorySegment;
import jdk.incubator.foreign.ResourceScope;
import jdk.incubator.foreign.CLinker;
import java.lang.invoke.MethodHandle;

public class FFMExample {
    public static void main(String[] args) throws Throwable {
        try (ResourceScope scope = ResourceScope.newConfinedScope()) {
            CLinker linker = CLinker.systemCLinker();
            MethodHandle strlen = linker.downcallHandle(
                    linker.lookup("strlen").get(),
                    MethodType.methodType(long.class, MemorySegment.class)
            );
            
            MemorySegment cString = CLinker.toCString("Hello, FFM API!", scope);
            long length = (long) strlen.invoke(cString);
            
            System.out.println("String length: " + length); // 15
        }
    }
}

설명:
- FFM API를 사용하여 네이티브 C 함수와 상호 운용성을 구현할 수 있습니다.
- 자바 21에서는 FFM API가 정식 기능으로 도입되어, 네이티브 메모리와 함수 호출이 더욱 안전하고 효율적으로 이루어질 수 있습니다.


10. 기타 주요 변경 사항

자바 21에는 위에서 설명한 기능들 외에도 다양한 성능 개선과 변경 사항이 포함되어 있습니다:

- Deprecation for Removal of Finalization: 'finalize()' 메서드의 사용 중단이 예고되었습니다.
- Updated 'java.util.zip' API: ZIP 파일 처리에 대한 API가 개선되었습니다.
- Deprecation of 'SecurityManager': 'SecurityManager'가 자바 21에서 사용 중단(deprecated)되었습니다.

이 외에도 자바 21은 개발자들이 더욱 안전하고 효율적인 코드를 작성할 수 있도록 다양한 기능 개선을 포함하고 있습니다.


11. 예제와 분석

자바 21의 새로운 기능들을 종합적으로 적용한 예제를 살펴보겠습니다.

종합 예제:

public class ComprehensiveJava21Example {

    public static void main(String[] args) throws Throwable {
        // Virtual Threads 사용
        Thread virtualThread = Thread.ofVirtual().start(() -> {
            System.out.println("Running in a virtual thread");
        });
        virtualThread.join();

        // Pattern Matching for switch 사용
        Object obj = 42;
        String result = switch (obj) {
            case Integer i -> "Integer: " + i;
            case String s -> "String: " + s.toLowerCase();
            case null -> "null";
            default -> "Unknown type";
        };
        System.out.println(result);

        // Record Patterns 사용
        var point = new Point(10, 20);
        var recordResult = switch (point) {
            case Point(int x, int y) -> "Point with " + x + " and " + y;
            default -> "Unknown point";
        };
        System.out.println(recordResult);

        // Sequenced Collections 사용
        SequencedCollection<String> sequencedList = new ArrayList<>(List.of("A", "B", "C"));
        sequencedList.addLast("D");
        sequencedList.addFirst("Z");
        System.out.println(sequencedList); // [Z, A, B, C, D]

        // Unnamed Patterns and Variables 사용
        if (obj instanceof Integer _) {
            System.out.println("This is an integer!");
        }

        // String Templates 사용
        int x = 10;
        int y = 20;
        String message = STR."The sum of \{x} and \{y} is \{x + y}.";
        System.out.println(message);

        // FFM API 사용
        FFMExample.performFFMOperations();
    }
}

class FFMExample {
    static void performFFMOperations() throws Throwable {
        try (ResourceScope scope = ResourceScope.newConfinedScope()) {
            CLinker linker = CLinker.systemCLinker();
            MethodHandle strlen = linker.downcallHandle(
                    linker.lookup("strlen").get(),
                    MethodType.methodType(long.class, MemorySegment.class)
            );

            MemorySegment cString = CLinker.toCString("Hello, FFM API!", scope);
            long length = (long) strlen.invoke(cString);

            System.out.println("String length: " + length);
        }
    }
}

record Point(int x, int y) {}

코드 분석:
- 이 예제는 자바 21의 주요 기능들을 활용하여 간단한 애플리케이션을 구현한 것입니다.
- Virtual Threads, Pattern Matching for switch, Record Patterns, Sequenced Collections, Unnamed Patterns, String Templates, FFM API 등의 기능을 종합적으로 보여줍니다.


12. 결론 및 추가 학습 자료

이번 글에서는 자바 21의 새로운 기능과 개선 사항을 자세히 살펴보았습니다. 자바 21은 개발자가 현대적인 애플리케이션을 작성하는 데 필요한 다양한 도구와 기능을 제공하며, 코드의 안전성과 성능을 크게 향상시킵니다. 특히 Virtual Threads, Pattern Matching for switch, Record Patterns, Sequenced Collections, FFM API 등의 기능은 자바 개발자들에게 매우 유용한 도구가 될 것입니다.

추가 학습 자료:
- 자바 공식 문서: [Oracle Java Documentation - Java 21](https://docs.oracle.com/en/java/javase/21/)
- 온라인 자바 튜토리얼: [W3Schools Java 21](https://www.w3schools.io/java21-features/)
- 자바 프로그래밍 학습 사이트: [GeeksforGeeks - Java 21 Features](https://www.geeksforgeeks.org/java-jdk-21-new-features-of-java-21/)

자바 21은 최신 자바 애플리케이션 개발을 위한 강력한 기능들을 제공하며, 이를 잘 활용하면 더욱 안전하고 효율적인 코드를 작성할 수 있습니다. 이번 기회를 통해 자바 21의 기능을 잘 이해하고 실무에서 적극 활용해보세요.


이제 자바 21의 새로운 기능에 대해 자세히 이해하게 되었습니다. 다음 글에서는 자바의 또 다른 고급 기능에 대해 다루도록 하겠습니다. 자바의 더 깊은 이해를 위해 계속해서 학습해나가세요!

반응형

'자바' 카테고리의 다른 글

자바 23의 기능  (2) 2024.09.19
자바 22의 기능  (4) 2024.09.18
자바 20의 기능  (4) 2024.09.16
자바 19의 기능  (4) 2024.09.15
자바 18의 기능  (4) 2024.09.14