SIMPOLOR
단순하고 색있게
Java 9 주요 특징 및 개선 사항: 모듈 시스템, JShell, Stream API 등
단순색
·
2024년 06월 04일
자바 9(Java SE 9)은 2017년 9월에 릴리스되었으며, 자바 언어와 플랫폼에 중요한 변화를 가져왔습니다. 특히, 모듈 시스템 도입을 통해 코드의 모듈화를 지원하고, 성능과 보안을 개선했습니다. ## Java Platform Module System (JPMS) - 자바 9의 가장 큰 변화는 모듈 시스템의 도입입니다. - 모듈 시스템을 사용하면 애플리케이션을 더 작은 모듈로 분할할 수 있으며, 각 모듈은 명시적인 종속성을 가질 수 있습니다. ``` module com.example.app { requires java.base; exports com.example.app; } ``` ## JShell: The Java Shell (Read-Eval-Print Loop) JShell은 자바의 REPL(Read-Eval-Print Loop) 도구로, 자바 코드를 인터랙티브하게 실행하고 테스트할 수 있습니다. ``` jshell> System.out.println("Hello, JShell!") ``` ## Improved Javadoc Javadoc에 새로운 검색 기능과 HTML5 지원이 추가되었습니다. 또한, Javadoc에 작성된 모든 API가 모듈로 그룹화되었습니다. ``` javadoc -d docs -module-source-path src --module com.example.app ``` ## Stream API 개선 `takeWhile`, `dropWhile`, `iterate` 등의 새로운 메서드가 추가되어 스트림 처리 기능이 향상되었습니다. ``` List<Integer> list = List.of(1, 2, 3, 4, 5, 6); list.stream() .takeWhile(n -> n < 4) .forEach(System.out::println); // 1 2 3 ``` ## Private Interface Methods 인터페이스에서 private 메서드를 정의할 수 있게 되어, 인터페이스의 기본 메서드를 더 잘 구조화할 수 있습니다. ``` public interface MyInterface { private void privateMethod() { System.out.println("This is a private method"); } default void defaultMethod() { privateMethod(); System.out.println("This is a default method"); } } ``` ## HTTP/2 Client (Incubator) 새로운 HTTP/2 클라이언트 API가 인큐베이터 모듈로 도입되었습니다. 이는 비동기 및 동기 HTTP 요청을 모두 지원합니다. ``` HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://example.com")) .build(); HttpResponse<String> response = client.send( request, HttpResponse.BodyHandlers.ofString() ); System.out.println(response.body()); ``` ## Process API 개선 새로운 프로세스 API를 통해 프로세스와 상호작용하는 기능이 개선되었습니다. ``` ProcessHandle currentProcess = ProcessHandle.current(); System.out.println("Process ID: " + currentProcess.pid()); ``` ## Multi-Release JAR Files 여러 자바 릴리스를 타겟으로 하는 클래스 파일을 포함할 수 있는 JAR 파일을 생성할 수 있습니다. ``` jar --create --file mr.jar --release 8 -C classes8 . --release 9 -C classes9 . ``` ## Immutable Collections `List`, `Set`, `Map` 인터페이스에 불변 컬렉션을 생성할 수 있는 팩토리 메서드가 추가되었습니다. ``` List<String> list = List.of("a", "b", "c"); Set<String> set = Set.of("a", "b", "c"); Map<String, Integer> map = Map.of("a", 1, "b", 2); ``` ## 고성능 JIT 컴파일러 Graal (Experimental) 새로운 고성능 JIT 컴파일러인 Graal이 도입되었습니다. 이는 향후 자바의 성능을 크게 개선할 것으로 기대됩니다. ``` java -XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler -XX:+EnableJVMCI MyApp ```
연관 포스트
Java 6 주요 특징 및 개선 사항: 성능 향상, 웹 서비스, 스크립팅 언어 지원 등
Java 7 주요 특징 및 개선 사항: 언어 개선, 새로운 IO API, 병렬 프로그래밍 등
Java 8 주요 특징 및 개선 사항: Lambda Expressions, Stream API, 날짜와 시간 API 등
Java 9 주요 특징 및 개선 사항: 모듈 시스템, JShell, Stream API 등
Java 10 주요 특징 및 개선 사항: Local Variable Type Inference, G1 GC 개선 등
Java 11 주요 특징 및 개선 사항: String 메서드, HTTP 클라이언트, ZGC 등
Java 12 주요 특징 및 개선 사항: Switch Expressions, Shenandoah GC 등
Java 13 주요 특징 및 개선 사항: 텍스트 블록, Switch Expressions, ZGC 등
Java 14 주요 특징 및 개선 사항: Pattern Matching, Records, Switch Expressions 등
Java 15 주요 특징 및 개선 사항: 텍스트 블록, Sealed Classes, ZGC 등
Java 16 주요 특징 및 개선 사항: Records, Pattern Matching, Sealed Classes 등
Java 17 주요 특징 및 개선 사항: Sealed Classes, Records, Pattern Matching 등
Java 18 주요 특징 및 개선 사항: Simple Web Server, UTF-8 기본 인코딩 등
Java 19 주요 특징 및 개선 사항: Pattern Matching, Virtual Threads, Foreign Function & Memory API 등
Java 20 주요 특징 및 개선 사항: Pattern Matching, Virtual Threads, Scoped Values 등
Java 21 주요 특징 및 개선 사항: Pattern Matching, Virtual Threads, Structured Concurrency 등