이 영역을 누르면 첫 페이지로 이동
Arc 블로그의 첫 페이지로 이동

Arc

페이지 맨 위로 올라가기

Arc

[Java] Java 9 특징

  • 2023.04.13 17:20
  • Language/Java
글 작성자: SeoArc

Java SE 9

2017년 9월에 공개했으며 Project Jigsaw 기반으로 런타임이 모듈화된 것이 가장 큰 특징이다. 이에 따라 대부분의 콘솔 프로그램 개발에는 더 이상 AWT나 Swing 같은 불필요한 라이브러리를 끌어쓸 필요 없이, 최상위 모듈인 Base만 사용해도 되게 되었다. 더불어 특정 프로그램에 최적화된 최소 런타임을 제작할 수 있게 되면서 패키징도 간편해졌다.

 

Jigsaw 모듈 시스템

module java.sql {
    requires public java.logging;
    requires public java.xml;
    exports java.sql;
    exports javax.sql;
    exports javax.transaction.xa;
}

jigsaw 프로젝트의 목표는 다음과 같다.

  • 라이브러리와 규모가 큰 시스템을 모듈화하고 강력한 접근 제어
    • 캡슐화를 통한 느슨한 결합으로 유지관리성 향상
    • 불필요하고 비인가된 모듈 간 결합을 방지하여 모듈의 올바른 사용을 유도
    • 보안성 향상
  • 성능 최적화: JPMS(Java Platform Module System)의 일환으로 JRE를 작은 단위의 모듈들로 쪼갰다. 이 덕분에 애플리케이션에서 실제로 사용하는 모듈만 패키징하여 배포할 수 있다.

Jigsaw 주는 이점은 다음과 같다.

  • 편하고 효율적인 Java 개발 환경을 만들 수 있다.
  • Jar 기반 모노리틱 방식을 개선하여 모듈 지정 및 모듈별 버전 관리 기능이 가능하다.
  • 필요한 모듈만 구동하여 크기와 성능 최적화가 가능하다.
  • 임베디드와 같은 환경에서 필요한 모듈만 탑재되어 적은 메모리로 로딩이 가능하다.

 

Interface Private Method

인터페이스 내에서 private method 사용이 가능해졌다.

interface MyInterface {
    default void check() {
        String result = staticPrivate();
        MyInterface myI = new MyInterface() {
            // 익명 클래스
        };
        result = myI.instancePrivate();
    }
    
    private static String staticPrivate() {
        return "static private";
    }
    
    private String instancePrivate() {
        return "instance private";
    }
}

 

Reactive Stream API 추가

Reactive Stream을 구현한 Flow API가 추가되었다.

java.util.concurrent.Flow
java.util.concurrent.Flow.Publisher
java.util.concurrent.Flow.Subscriber
java.util.concurrent.Flow.Processor

 

Optional To Stream

Stream<Optional> person = getPerson(id);

// Optional.stream()은 Stream<Optional>을 Stream<Person>으로 바꾸어준다.
Stream personStream = person.flatMap(Optional::stream);

// Optional로 Stream을 생성할 수 있다.
Stream<Integer> stream = Optional.of(1).stream();

 

Stream API 개선

  • iterate와 같이 Predicate를 받을 수 있는 인터페이스가 추가되었다.
IntStream.iterate(1, i -> i < 100, i -> i + 1)
         .forEach(System.out::println);
  • dropWhile, takeWhile, ofNullable의 스트림 메서드가 추가되었다.

 

HTTP2 Client

  • HttpURLConnection을 대체
  • jdk.incubator.http 패키지 추가
  • HTTP/1.1, HTTP/2 프로토콜 지원
  • Apache HttpClient, Netty, Jetty와 비교할 수 있는 성능
  • 동기/비동기 모드 지원

[동기 호출]

HttpResponse reponse = HttpRequest.create(new URI("http://www.test.com"))
                                  .body(noBody())
                                  .GET().send();

int responseCode = response.responseCode();
String responseBody = response.body(asString());
System.out.println(responseBody);

 

[비동기 호출]

HttpRequest request = HttpRequest.create(new URI("http://www.test.com"))
                                 .body(noBody())
                                 .GET();

CompletableFuture<HttpResponse> future = request.sendAsync();
Thread.sleep(10);
if (!future.isDone()) {
    future.cancel(true);
    System.err.println("timeout");
    return;
}
HttpResponse response = future.get();

 

이 외 변경 사항은 다음과 같다.

  • Java를 인터프리터 언어 shell 처럼 사용할 수 있는 JShell 추가
  • Deprecated 표시에 해당 버전과 제거 예정 여부를 표시할 수 있도록 변경
  • Multi-Resolution Image API 추가
  • Multi-release JARs
  • 구조적 불변 컬렉션
  • 통합 로깅
  • HTML5 Javadoc
  • 프로퍼티 파일에 UTF-8 지원
  • GC 개선
  • Diamond Operator 개선
    • anonymous inner class에서 diamond operator를 사용할 수 있음

 

새로 적용된 버저닝 정책에 따라 이 버전부터는 1.x 버전이 아닌 9.0으로 내놓았다. 또 제거 예정인 Deprecated API는 다음 버전인 Java SE 10부터 완전 삭제 예정이므로 해당 API를 쓰는 프로그램은 이후 버전에서 컴파일이 되지 않는다.

 

이 버전 부터는 6개월마다 새로운 버전이 업데이트된다.

저작자표시

'Language > Java' 카테고리의 다른 글

[Java] Java 버전 별 특징  (2) 2023.04.14
[Java] Java 11 특징  (0) 2023.04.13
[Java] Java 8 특징  (0) 2023.04.13
[Java] 숫자형 스트림  (0) 2023.04.11
[Java] 스트림 연산  (0) 2023.04.07

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [Java] Java 버전 별 특징

    [Java] Java 버전 별 특징

    2023.04.14
  • [Java] Java 11 특징

    [Java] Java 11 특징

    2023.04.13
  • [Java] Java 8 특징

    [Java] Java 8 특징

    2023.04.13
  • [Java] 숫자형 스트림

    [Java] 숫자형 스트림

    2023.04.11
다른 글 더 둘러보기

정보

Arc 블로그의 첫 페이지로 이동

Arc

  • Arc의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (106)
    • Language (28)
      • C++ (0)
      • C# (0)
      • Java (28)
    • Algorithm (47)
      • Algorithm (15)
      • Data Structure (6)
      • PS (26)
    • Computer Science (22)
      • Design Pattern (1)
      • Network (14)
      • OS (7)
    • Game (0)
      • Unity (0)
    • Backend (3)
      • Spring (1)
      • JPA (2)
    • DB (0)
      • SQL (0)
    • DevOps (2)
      • AWS (0)
      • Docker (2)
      • Jenkins (0)
      • Nginx (0)
    • Software Engineering (4)
      • OOP (4)
    • AI (0)
      • Machine Learning (0)
    • Others (0)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • 알고리즘
  • 자바
  • 그래프
  • 네트워크
  • algorithm
  • java
  • graph
  • network

나의 외부 링크

정보

SeoArc의 Arc

Arc

SeoArc

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © SeoArc. Designed by Fraccino.

티스토리툴바