Project Jigsaw(프로젝트 지그소)의 가장 중요한 목표는 모듈화(modularity) 개념을 도입하여 Java 9에서 모듈을 생성하고, 이를 JDK 전반에 적용하는 것입니다. 이를 통해 자바 플랫폼은 더 작고, 안전하며, 확장 가능한 구조로 발전하게 됩니다.
모듈화(Jigsaw)의 주요 장점
- 강력한 캡슐화(Strong Encapsulation): 모듈은 사용이 허용된 부분에만 접근할 수 있습니다. 패키지가 module-info.java 파일에서 명시적으로 export되지 않는 한, 해당 패키지의 public 클래스라도 외부에는 공개되지 않습니다.
- 명확한 의존성(Clear Dependencies): 모듈은 requires 절을 통해 사용하는 다른 모듈을 반드시 선언해야 합니다. 이렇게 모듈들이 결합되면 더 작은 런타임을 구성할 수 있어, 비교적 작은 컴퓨팅 기기로도 손쉽게 확장할 수 있습니다.
- 높은 신뢰성(Reliability): 런타임 오류를 사전에 제거하면 애플리케이션의 신뢰성이 크게 향상됩니다. 예를 들어, 필요한 클래스가 누락되어 실행 시점에 ClassNotFoundException이 발생하고 애플리케이션이 실패하는 경우가 대표적입니다. 모듈 시스템은 이러한 문제를 컴파일 시점이나 시작 시점에 미리 잡아냅니다.
Jigsaw 프로젝트를 구성하는 주요 JEP(JDK Enhancement Proposal)
Jigsaw 프로젝트는 여러 개의 JEP(JDK 개선 제안)로 나뉘어 진행되었습니다. 각각의 역할은 다음과 같습니다.
JEP 200 – Modular JDK(모듈형 JDK)
JPMS(Java Platform Module System)를 활용해 JDK를 빌드 시점, 컴파일 시점 또는 런타임에 결합할 수 있는 모듈들의 집합으로 모듈화합니다.
JEP 201 – Modular Source Code(모듈형 소스 코드)
JDK의 소스 코드 자체를 모듈 단위로 재구성하고, 모듈을 컴파일할 수 있도록 빌드 도구를 개선합니다.
JEP 220 – Modular Runtime Images(모듈형 런타임 이미지)
JRE와 JDK의 런타임 이미지를 재구조화하여 모듈 구조를 수용함으로써 보안, 성능, 유지보수성을 향상시킵니다.
JEP 260 – Encapsulate Most Internal APIs(내부 API 캡슐화)
대다수의 내부 API에 대한 직접 접근 및 리플렉션(reflection)을 통한 접근을 제한합니다. 변경될 가능성이 높은 내부 API에 접근하는 것은 매우 위험하기 때문에, 이를 모듈 내부로 캡슐화하고 사용이 허용된 내부 API만 외부에 노출합니다.
JEP 261 – Module System(모듈 시스템)
JVM, 자바 프로그래밍 언어, 그리고 기타 표준 API를 변경하여 자바 모듈 시스템의 공식 사양을 구현하는 핵심 JEP입니다.
JEP 282 – jlink, the Java Linker(자바 링커)
모듈과 그 의존성을 함께 패키징하여, 필요한 부분만 포함된 더 작은 크기의 맞춤형 런타임을 생성할 수 있도록 지원합니다.
이처럼 Project Jigsaw는 자바를 모듈 기반의 현대적인 플랫폼으로 전환하기 위한 일련의 변화를 담고 있으며, Java 9 이후 자바 개발 방식에 큰 영향을 미쳤습니다.