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 |