본문 바로가기
프로그래밍

Java 17의 주요 기능 및 변화

by 이음코드 2025. 1. 12.
반응형

Java 17은 2021년 9월에 출시된 “장기 지원 버전(LTS, Long-Term Support)”으로 Java 11 이후 3년만에 나온 LTS 릴리스입니다. 이 버전은 성능 개선, 새로운 언어 기능, 플랫폼 확장, 그리고 불필요한 기능 제거를 포함하여 개발자에게 더 강력하고 효율적인 개발 환경을 제공합니다.
이 글에서는 Java17의 주요 기능, 변화, 사용 예제 그리고 도입 시 유의할 점을 자세히 살펴보겠습니다.


1) Java 17의 주요 변경 사항 개요

Java 17에서는 다음과 같은 기능과 변경 사항이 포함되었습니다.
1. 새로운 언어 기능
  - sealed 클래스
  - 패턴 매칭의 확장 (switch를 위한 미리보기)
2. JVM 및 API 개선
  - Foreign Function & Memory API (Incubator)
  - 새로운 RandomGenerator 인터페이스
3. 불필요한 기능 제거
  - Applet API 제거
  - RMI Activation 제거
4. 새로운 툴과 플랫폼 지원
  - MacOS/AArch64 플랫폼의 공식 지원

2) 주요 언어 기능과 변화

1. sealed 클래스
sealed클래스는 상속을 제한하여 코드의 안정성과 보안성을 높이는데 유용합니다. 이를 통해 특정 클래스만 부모 클래스를 상속할 수 있습니다.
  - 문법

sealed class Shape permits Circle, Rectangle { }

final class Circle extends Shape { }
final class Rectangle extends Shape { }

  - 특징

  • sealed : 상속 가능한 클래스 명시
  • non-sealed : 제한을 완화 (optional)
  • final : 더 이상 상속 불가


  - 예제

sealed interface Animal permits Dog, Cat { }

final class Dog implements Animal {
    public void sound() {
        System.out.println("Woof");
    }
}

final class Cat implements Animal {
    public void sound() {
        System.out.println("Meow");
    }
}

public class SealedExample {
    public static void main(String[] args) {
        Animal dog = new Dog();
        dog.sound();

        Animal cat = new Cat();
        cat.sound();
    }
}


2. switch의 패턴 매칭 (미리보기 기능)
Java 17에서는 switch 구문에서 패턴 매칭을 지원하여 더 간결한 코드를 작성할 수 있습니다.
  - 예제

public class PatternMatchingSwitch {
    public static String process(Object obj) {
        return switch (obj) {
            case Integer i -> "Integer: " + i;
            case String s -> "String: " + s;
            case null -> "Null value";
            default -> "Unknown type";
        };
    }

    public static void main(String[] args) {
        System.out.println(process(42));        // Integer: 42
        System.out.println(process("Java"));   // String: Java
        System.out.println(process(null));     // Null value
    }
}


3) 새로운 API 및 플랫폼 지원

1. RandomGenerator 인터페이스
Java 17은 난수 생성의 다양성을 제공하는 새로운 인터페이스를 도입했습니다.
  - 예제

import java.util.random.RandomGenerator;

public class RandomExample {
    public static void main(String[] args) {
        RandomGenerator random = RandomGenerator.of("L64X128MixRandom");

        System.out.println("Random Int: " + random.nextInt());
        System.out.println("Random Double: " + random.nextDouble());
    }
}

  - 장점

  • 다양한 난수 생성기 지원
  • 더 나은 성능과 품질


2. Foreign Function & Memory API (Incubator)
C/C++ 라이브러리와 상호작용을 위한 새로운 API가 추가되었습니다. 이는 JNI(Java Native Interface)를 대체할 잠재력을 가지고 있습니다.
  - 주요 특징

  • 외부 함수 호출
  • 메모리 관리의 안정성과 효율성 제공


3. MacOS/AArch64 플랫폼 지원
Java 17은 “MacOS ARM 프로세서(AArch64)” 를 공식 지원합니다. 이는 Apple의 M1 칩과 같은 ARM 기반 아키텍처에서 성능을 최적화합니다.

4) 제거된 기능

1. Applet API 제건
Java 애플릿은 보안 및 플랫폼 호환성 문제로 더 이상 사용되지 않습니다. Java17에서 관련 API가 제거되었습니다.
  - 제거된 클래스

  • Java.applet.Applet
  • Javax.swing.JApplet


2. RMI Activation 제거
Java RMI(Remote Method Invocation)의 Activation 시스템이 제거되었습니다. 대부분의 사용 사례가 현대적인 네트워크 기술로 대체되었습니다.

5) 도입 시 유의할 점

1. JDK 17로 마이그레이션
Java 17로의 업그레이드 시 다음 사항을 점검해야 합니다.

  • 프로젝트에서 사용 중인 라이브러리 및 종속성의 호환성 확인
  • Deprecated API 제거 여부 확인
  • JDK 17의 새로운 기능 활용


2. LTS 장기 지원 활용
Java 17은 장기 지원 버전 (LTS)으로 2029년까지 공식 지원을 받을 수 있습니다. 이는 안정성과 장기적인 지원을 원하는 프로젝트에 적합합니다.

6) 결론

Java 17은 현대적인 Java개발을 위한 필수적인 업그레이드입니다. 새로운 언어 기능, API개선, 플랫폼 지원 확장을 통해 생산성을 높이고 불필요한 기능 제거로 더 간결하고 효율적인 개발 환경을 제공합니다. 특히 sealed클래스와 switch 패턴 매칭은 코드 작성 시 간결함과 명확성을 더해줍니다.

반응형