Java 9는 기존 버전에는 없던 다양한 기능 개선과 새로운 특징을 도입한 릴리스입니다. 대표적으로 JShell(대화형 REPL 도구), HTTP/2 클라이언트, 자바 플랫폼 모듈 시스템(JPMS), 멀티 릴리스 JAR 파일, Stack Walking API, 인터페이스의 private 메서드, Process API 업데이트, 컬렉션 API 업데이트, Stream API 개선 등이 있습니다.
그중에서도 가장 큰 변화는 코드 구조의 최상위 구성 요소가 '패키지'에서 '모듈'로 바뀌었다는 점입니다. 아래에서 Java 8과 Java 9의 주요 차이점을 자세히 살펴보겠습니다.
Java 8과 Java 9의 주요 차이점
- Java 8 이하 버전에서 최상위 구성 요소는 패키지(package)입니다. 패키지는 관련된 타입들(클래스, 인터페이스, 열거형 등)을 하나의 그룹으로 묶고, XML·이미지·프로퍼티 파일 같은 리소스도 함께 포함합니다. 반면 Java 9는 관련된 패키지들을 묶어주는 새로운 구성 요소인 모듈(module)을 도입했으며, 모듈을 정의하는 모듈 디스크립터(module-info.java) 파일도 새롭게 추가되었습니다.
- Java 8 애플리케이션은 패키지를 최상위 구성 요소로 사용하는 반면, Java 9 애플리케이션은 모듈을 최상위 구성 요소로 사용합니다.
- Java 9의 각 모듈은 하나의 모듈 디스크립터만 가질 수 있으며, 여러 모듈을 하나의 단일 모듈로 통합할 수 없습니다. 반면 Java 8의 패키지에는 이러한 제약이 없습니다.
이러한 모듈 시스템 덕분에 Java 9부터는 내부 API를 명시적으로 캡슐화하고, 필요한 모듈만 포함한 경량 런타임 이미지를 만들 수 있게 되었습니다.
Java 8의 구조
Packages
- Types (classes, enums, interfaces 등)
- Code
- Data
- Resources
- xml
- images
- propertiesJava 9의 구조
Modules (Resources, Module Descriptor)
- Packages
- Types (classes, enums, interfaces 등)
- Code
- Data
- Resources
- xml
- images
- properties정리하자면, Java 9의 가장 큰 특징은 JPMS(자바 플랫폼 모듈 시스템)를 통해 애플리케이션과 JDK 자체를 모듈 단위로 구성할 수 있게 된 것입니다. 이를 통해 더 안전한 캡슐화, 향상된 유지보수성, 그리고 jlink를 활용한 최적화된 경량 런타임 구성이 가능해졌습니다.