[java] Jigsaw와 기존 자바 모듈화 방식의 차이점

자바 9부터 도입된 Jigsaw 프로젝트는 자바의 모듈화를 위한 새로운 방식을 제공합니다. 이전에는 자바 애플리케이션을 패키지 단위로 관리했지만, Jigsaw를 통해 모듈 단위로 관리할 수 있게 되었습니다. 이번 글에서는 Jigsaw와 기존 자바 모듈화 방식의 주요 차이점에 대해 살펴보겠습니다.

1. 세분화된 모듈화

기존의 자바 모듈화 방식은 패키지를 기준으로 모듈을 구성했습니다. 하나의 패키지에 속한 모든 클래스와 리소스들이 같은 모듈에 속하게 되는 것이었습니다. 하지만 Jigsaw에서는 패키지보다 더 작은 단위인 모듈을 정의할 수 있습니다. 이는 모듈 간의 의존성을 더욱 세밀하게 관리할 수 있고, 모듈 간의 충돌을 방지할 수 있게 됩니다.

2. 고립된 클래스 경로

Jigsaw에서는 모듈마다 고유한 클래스 경로를 가지며, 다른 모듈에서 해당 경로에 접근할 수 없습니다. 이로 인해 각 모듈은 자신의 의존성에 대한 제어권을 갖게 되어 모듈 간의 관계를 명확히 정의할 수 있습니다. 따라서 모듈 간의 의존성 충돌이나 클래스 경로 충돌을 사전에 예방할 수 있습니다.

3. 런타임 라이브러리 제한

Jigsaw는 런타임 라이브러리의 사용을 제한합니다. 기존에는 자바의 표준 라이브러리를 어디서든 사용할 수 있었지만, Jigsaw에서는 특정 모듈에만 제한된 라이브러리 사용이 가능합니다. 이로 인해 불필요한 라이브러리 의존성을 줄이고, 애플리케이션의 크기와 실행 시간을 최적화할 수 있게 됩니다.

4. 런타임 성능 개선

Jigsaw는 모듈화된 애플리케이션의 실행 시간과 메모리 사용량을 최적화할 수 있도록 설계되었습니다. JAR 파일에 비해 모듈은 런타임에서 더욱 효율적으로 로딩되며, 필요한 모듈만 로드하여 메모리 사용량을 줄일 수 있습니다. 따라서 Jigsaw를 통해 모듈화된 애플리케이션은 더욱 빠른 실행 속도와 효율적인 자원 사용을 보장할 수 있습니다.

5. 개발자 경험 개선

Jigsaw는 개발자의 모듈화 작업을 지원하기 위해 새로운 도구와 API를 제공합니다. 모듈 경로와 모듈 정보를 관리하는 새로운 도구인 jdepsjlink를 통해 개발자는 모듈 간의 의존성을 쉽게 확인하고, 애플리케이션을 최적화된 형태로 빌드할 수 있게 됩니다. 또한, Jigsaw는 module-info.java라는 새로운 모듈 정의 파일을 도입하여 모듈의 의존성과 내보내는 패키지 등을 명시할 수 있도록 지원합니다.


위에서 살펴본 것처럼 Jigsaw는 기존 자바 모듈화 방식과 비교해 큰 변화를 가져왔습니다. 세분화된 모듈화, 고립된 클래스 경로, 런타임 라이브러리 제한, 런타임 성능 개선, 그리고 새로운 개발자 도구와 API 등은 Jigsaw가 자바 애플리케이션 개발을 더욱 효율적으로 만들어줍니다.

참고 자료: