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

 

모듈 시스템 (프로젝트 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

 

개선된 프로세스 API

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

 

// 개선된 프로세스 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()));
    }
}

 

Reactive Streams

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

 

// 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();
    }
}

 

Stream API 개선

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

 

// 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]
    }
}

 

 

인터페이스 내부 메서드

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

 

// 인터페이스 내부 메서드 예제
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();
    }
}

 

HTTP/2 클라이언트

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

 

// 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();
    }
}

 

 

다중 해상도 이미지

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

 

// 다중 해상도 이미지 예제
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

소소한개발팁

@개발자 뱅

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