소소한개발팁
Published 2023. 7. 9. 15:28
Java 9 컴퓨터 언어/Java Version
반응형

 

1. 모듈 시스템 (프로젝트 Jigsaw)

 

Java 9에서는 Java 플랫폼 모듈 시스템 (JPMS)이 도입되어 Java 플랫폼에 모듈성을 제공했습니다. 이 모듈화를 통해 코드를 모듈로 캡슐화하고 명시적으로 모듈 간 종속성을 정의하여 더 관리 가능하고 확장 가능한 애플리케이션을 개발할 수 있습니다.

 

 

Project Jigsaw 사용 방법

모듈 선언 파일(module-info.java) 작성 // 모듈 선언 파일 (module-info.java) module com.example.mymodule { requires com.example.dependencymodule; // 다른 모듈에 대한 의존성 선언 exports com.example.mymodule.package1; // 다른 모

devlopjeong12.tistory.com

 

2. 개선된 프로세스 API

 Java 9는 프로세스 API를 개선하여 운영 체제 프로세스를 더욱 잘 제어하고 관리할 수 있게 했습니다. 새로운 API를 사용하면 프로세스를 관리하고 PID (프로세스 ID)를 가져오며 입력/출력 스트림을 처리하는 등의 작업이 가능해집니다.

 

<java />
// 개선된 프로세스 API 예제 import java.lang.ProcessHandle; public class Example { public static void main(String[] args) { // 현재 실행 중인 모든 프로세스의 정보 가져오기 ProcessHandle.allProcesses() .forEach(process -> System.out.println("PID: " + process.pid() + ", Command: " + process.info().command())); } }

 

3. Reactive Streams

 Java 9에서는 리액티브 프로그래밍과 백프레셔 처리를 지원하는 Flow API가 도입되었습니다. 이를 통해 개발자는 데이터 스트림을 비동기적으로 효율적으로 처리하여 리액티브하고 반응성 있는 애플리케이션을 개발할 수 있습니다.

 

<java />
// Reactive Streams 예제 import java.util.concurrent.Flow; import java.util.concurrent.SubmissionPublisher; public class Example { public static void main(String[] args) throws InterruptedException { // Publisher 생성 SubmissionPublisher<String> publisher = new SubmissionPublisher<>(); // Subscriber 생성 Flow.Subscriber<String> subscriber = new Flow.Subscriber<>() { public void onSubscribe(Flow.Subscription subscription) { subscription.request(1); } public void onNext(String item) { System.out.println("Received: " + item); subscription.request(1); } public void onError(Throwable throwable) { throwable.printStackTrace(); } public void onComplete() { System.out.println("Completed"); } }; // Subscriber 등록 publisher.subscribe(subscriber); // 데이터 발행 publisher.submit("Data 1"); publisher.submit("Data 2"); publisher.submit("Data 3"); // 잠시 대기 Thread.sleep(1000); // 종료 publisher.close(); } }

 

4. Stream API 개선

Java 9에서는 Stream API에 takeWhile(), dropWhile(), ofNullable() 등 여러 가지 새로운 메서드가 추가되었습니다. 이러한 메서드는 스트림을 다루는 데 있어 표현력과 유연성을 향상시킵니다.

 

<java />
// Stream API 개선 예제 import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; public class Example { public static void main(String[] args) { // takeWhile: 조건을 만족하는 동안 요소를 가져옴 List<Integer> numbers = Stream.of(1, 2, 3, 4, 5, 6) .takeWhile(n -> n < 4) .collect(Collectors.toList()); System.out.println(numbers); // 출력: [1, 2, 3] // dropWhile: 조건을 만족하는 동안 요소를 건너뜀 List<Integer> numbers2 = Stream.of(1, 2, 3, 4, 5, 6) .dropWhile(n -> n < 4) .collect(Collectors.toList()); System.out.println(numbers2); // 출력: [4, 5, 6] } }

 

 

5. 인터페이스 내부 메서드

Java 9에서는 인터페이스 내부에 private 메서드를 선언할 수 있게 되었습니다. 이 기능을 사용하면 인터페이스 작성자는 공개 API에 노출되지 않는 공통 유틸리티 메서드의 기본 구현을 제공할 수 있습니다.

 

<java />
// 인터페이스 내부 메서드 예제 interface ExampleInterface { default void publicMethod() { System.out.println("This is a public method."); privateMethod(); } private void privateMethod() { System.out.println("This is a private method."); } } public class Example implements ExampleInterface { public static void main(String[] args) { Example example = new Example(); example.publicMethod(); } }

 

6. HTTP/2 클라이언트

Java 9에서는 HTTP/2 프로토콜을 지원하는 새로운 HTTP 클라이언트 API가 도입되었습니다. 이 API는 더 나은 성능, 개선된 보안 기능 및 HTTP 요청 및 응답 처리를 위한 더욱 현대적인 API를 제공합니다.

 

<java />
// HTTP/2 클라이언트 예제 import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.util.concurrent.CompletableFuture; public class Example { public static void main(String[] args) throws Exception { // HTTP/2 클라이언트 생성 HttpClient httpClient = HttpClient.newHttpClient(); // HTTP 요청 생성 HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.example.com/data")) .build(); // HTTP 요청 보내기 (비동기) CompletableFuture<HttpResponse<String>> futureResponse = httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofString()); // HTTP 응답 받기 (비동기) futureResponse.thenAccept(response -> { System.out.println("Status code: " + response.statusCode()); System.out.println("Response body: " + response.body()); }); // 요청이 완료될 때까지 대기 futureResponse.join(); } }

 

 

7. 다중 해상도 이미지

Java 9에서는 MultiResolutionImage 인터페이스를 통해 다중 해상도 이미지를 지원합니다. 이를 통해 다른 해상도로 이미지를 생성하고 특정 디스플레이나 사용 사례에 가장 적합한 해상도를 검색할 수 있습니다.

 

<java />
// 다중 해상도 이미지 예제 import javax.imageio.ImageIO; import java.awt.Image; import java.awt.image.MultiResolutionImage; import java.io.File; import java.io.IOException; import java.util.List; public class Example { public static void main(String[] args) throws IOException { // 다중 해상도 이미지 로드 File imageFile = new File("image.jpg"); Image image = ImageIO.read(imageFile); MultiResolutionImage multiResImage = (MultiResolutionImage) image; // 지원되는 모든 해상도 가져오기 List<Image> resolutions = multiResImage.getResolutionVariants(); // 각 해상도의 너비와 높이 출력 for (Image resolution : resolutions) { int width = resolution.getWidth(null); int height = resolution.getHeight(null); System.out.println("Resolution: " + width + "x" + height); } } }
반응형

'컴퓨터 언어 > Java Version' 카테고리의 다른 글

Java 11  (0) 2023.07.09
Java 10  (0) 2023.07.09
Java 8  (0) 2023.07.06
profile

소소한개발팁

@개발자 뱅

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!