소개
Jigsaw는 자바 9에서 도입된 모듈화 시스템입니다. 이 모듈 시스템은 기존에는 클래스와 패키지 단위로 구성되었던 자바 애플리케이션을 모듈 단위로 분리하여 개발하는 방식입니다. Jigsaw 모듈을 활용하면 자바 개발자는 애플리케이션의 종속성을 명시적으로 관리할 수 있고, 실행 시간에 필요한 모듈만 로드하여 애플리케이션의 메모리 소비를 최적화할 수 있습니다.
모듈 정의하기
자바 애플리케이션에서 모듈을 구성하기 위해서는 module-info.java
파일을 생성해야 합니다. 이 파일은 기존의 package
키워드를 사용하여 패키지를 정의하는 것과는 달리, module
키워드를 사용하여 모듈을 정의합니다. 모듈 정의 파일에는 해당 모듈의 이름, 의존하는 다른 모듈의 이름, 필요한 패키지들을 명시적으로 선언합니다.
module com.example.myapp {
requires org.example.mylibrary;
exports com.example.myapp.api;
}
위의 예시에서 com.example.myapp
은 모듈의 이름을 나타내며, org.example.mylibrary
는 의존하는 모듈의 이름입니다. requires
키워드를 사용하여 모듈 간의 의존성을 명시합니다. 마지막으로, exports
키워드를 사용해서 다른 모듈에서 사용할 수 있도록 공개할 패키지를 선언합니다.
모듈화된 애플리케이션 빌드하기
모듈화된 애플리케이션을 빌드하기 위해서는 기존의 자바 빌드 도구인 Maven이나 Gradle을 사용할 수 있습니다. Maven을 사용하는 경우, pom.xml
파일에 다음과 같이 모듈화 관련 설정을 추가해야 합니다.
<project>
...
<properties>
<maven.compiler.module>com.example.myapp</maven.compiler.module>
</properties>
...
</project>
Gradle을 사용하는 경우, build.gradle
파일에 다음과 같이 모듈화 관련 설정을 추가해야 합니다.
plugins {
id 'java'
}
java {
modularity.inferModulePath = true
}
모듈화된 애플리케이션을 빌드하고 실행하기 위해서는 자바 컴파일러에 --module
옵션을 사용하여 모듈 경로를 전달해야 합니다.
javac --module-path mods --module com.example.myapp
위의 예시에서 mods
는 빌드된 모듈들이 위치하는 디렉토리를 나타냅니다.
모듈화된 애플리케이션 실행하기
모듈화된 애플리케이션을 실행하기 위해서는 java
명령어에 --module
옵션을 사용하여 실행할 모듈을 지정해야 합니다.
java --module-path mods --module com.example.myapp/com.example.myapp.Main
위의 예시에서 com.example.myapp/com.example.myapp.Main
은 실행할 모듈과 진입점 클래스를 나타냅니다.
결론
Jigsaw 모듈을 활용하면 자바 개발자는 애플리케이션의 구성 요소를 명확하게 정의하고 관리할 수 있습니다. 이를 통해 개발자는 코드의 유지 보수성을 향상시키고, 실행 시간과 메모리 사용량을 최적화할 수 있습니다. Jigsaw 모듈을 적절히 활용하면 더욱 효율적인 자바 애플리케이션을 개발할 수 있습니다.