본문 바로가기
카테고리 없음

Java 9(1.9)에서 추가된 새로운 기능과 변화

by 키붕이 2025. 3. 15.
반응형

JAVA 1.9

 

Java 9(1.9)은 Java의 장기적인 발전을 위한 중요한 릴리스였습니다. 특히, 모듈 시스템(Jigsaw 프로젝트) 도입을 비롯하여 성능 향상, API 개선, 프로세스 제어 기능 추가 등 다양한 변경 사항이 포함되었습니다. 본 포스트에서는 Java 9에서 추가된 주요 기능을 정리하고, 개발자들에게 어떤 영향을 미치는지 설명하겠습니다.

1. Java Platform Module System (JPMS, 모듈 시스템)

가장 큰 변화 중 하나는 바로 모듈 시스템의 도입입니다. 기존의 Java는 클래스 패스(Classpath) 기반으로 애플리케이션을 구성했지만, 이 방식은 충돌 문제와 유지보수의 어려움을 초래했습니다. Java 9에서는 Jigsaw 프로젝트를 통해 모듈 시스템을 도입하여 코드의 재사용성과 보안성을 높였습니다.

1.1 모듈 시스템의 주요 개념

  • module-info.java: 모듈의 정의 파일로, 해당 모듈에서 사용할 패키지를 선언합니다.
  • exports: 모듈이 외부에 제공하는 패키지를 지정합니다.
  • requires: 다른 모듈에서 필요한 모듈을 지정합니다.
module com.example.app {
    requires java.base;
    exports com.example.api;
}

이를 통해 필요 없는 의존성을 제거하고, 애플리케이션을 더 구조적으로 관리할 수 있습니다.

2. JShell (REPL - Read Eval Print Loop) 도입

Java 9에서는 JShell이라는 REPL 도구가 추가되었습니다. 이는 Python, JavaScript 등의 언어에서 제공하는 대화형 인터프리터와 유사하게 Java 코드를 즉시 실행하고 테스트할 수 있도록 해줍니다.

jshell> int a = 10;
jshell> System.out.println(a * 2);
20

JShell을 활용하면 코드 실행 시간을 단축하고, 빠른 프로토타이핑이 가능해졌습니다.

3. Stream API 개선

Java 8에서 도입된 Stream API는 함수형 프로그래밍을 쉽게 구현할 수 있도록 도와주었는데, Java 9에서는 새로운 메서드가 추가되었습니다.

  • takeWhile() : 조건이 참인 동안 요소를 가져옴
  • dropWhile() : 조건이 처음으로 거짓이 되는 시점 이후의 요소를 반환
  • ofNullable() : null 값을 처리할 수 있도록 해줌
List<Integer> numbers = List.of(1, 2, 3, 4, 5, 6);
numbers.stream()
       .takeWhile(n -> n < 4)
       .forEach(System.out::println);
// 출력: 1, 2, 3

이러한 추가 기능은 불필요한 데이터를 필터링하고 더 효율적인 스트림 처리를 가능하게 합니다.

4. HTTP/2 클라이언트 API 추가

Java 9에서는 새로운 HTTP 클라이언트 API가 추가되었습니다. 기존의 HttpURLConnection보다 비동기 프로그래밍을 지원하며 성능이 개선되었습니다.

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://example.com"))
    .GET()
    .build();
HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());

HTTP/2 프로토콜을 지원하여 더 빠르고 효율적인 네트워크 통신이 가능해졌습니다.

5. Process API 개선

기존 Java에서 운영 체제의 프로세스를 제어하는 것은 어렵고 비효율적이었습니다. Java 9에서는 ProcessHandle API를 추가하여 현재 실행 중인 프로세스를 쉽게 제어할 수 있도록 개선되었습니다.

ProcessHandle currentProcess = ProcessHandle.current();
System.out.println("PID: " + currentProcess.pid());

이를 활용하면 운영 체제에서 실행되는 프로세스를 제어하거나 모니터링하는 것이 훨씬 쉬워집니다.

6. Immutable Collections Factory Methods (불변 컬렉션 팩토리 메서드)

Java 9에서는 불변 컬렉션을 쉽게 생성할 수 있도록 새로운 팩토리 메서드가 추가되었습니다.

List<String> list = List.of("A", "B", "C");
Set<String> set = Set.of("X", "Y", "Z");
Map<Integer, String> map = Map.of(1, "One", 2, "Two");

이전에는 Collections.unmodifiableList() 등을 사용해야 했지만, 이제는 더 간결하게 불변 컬렉션을 생성할 수 있습니다.

7. G1 GC 기본 설정

Java 9에서는 가비지 컬렉터(GC)의 기본값이 G1 GC로 변경되었습니다. 이는 더 나은 성능과 낮은 지연 시간(low latency)을 제공하여 애플리케이션의 응답 속도를 개선하는 역할을 합니다.

-XX:+UseG1GC

G1 GC는 대규모 애플리케이션에서 특히 효과적인 메모리 관리 기능을 제공합니다.

8. Multi-Release JAR 파일 지원

이제 하나의 JAR 파일에서 여러 Java 버전에 맞는 클래스를 포함할 수 있습니다. 이를 통해 하위 호환성을 유지하면서도 최신 기능을 활용할 수 있습니다.

META-INF/versions/9/com/example/MyClass.class

이 기능을 활용하면 Java 8과 Java 9 이상 버전을 동시에 지원하는 라이브러리를 배포할 수 있습니다.


결론

Java 9(1.9)는 단순한 업데이트가 아닌, Java 생태계의 중요한 변화를 가져온 버전입니다. 특히, 모듈 시스템 도입을 통해 대규모 프로젝트의 유지보수를 더욱 쉽게 만들었으며, JShell, HTTP/2 클라이언트, 스트림 API 개선 등 개발자의 생산성을 높이는 기능들이 추가되었습니다.

Java 9 이후에도 Java는 꾸준히 발전해왔으며, 최신 Java 버전을 적극적으로 활용하면 더욱 효율적인 애플리케이션 개발이 가능합니다. 앞으로도 Java의 변화에 주목하며 새로운 기능들을 활용해 보시기 바랍니다!

반응형