Java 9부터 도입된 Jigsaw 모듈 시스템은 큰 규모의 애플리케이션을 작은 모듈로 분리하여 개발과 관리를 용이하게 해주는 기능입니다. 이 기능을 사용하면 모듈에 대한 식별자를 정의하고 의존성을 관리할 수 있습니다.
모듈 식별자
모듈 식별자는 모듈에 대한 고유한 이름이며, module-info.java
파일에 정의됩니다. 모듈 식별자는 module
키워드를 사용하여 선언됩니다. 예를 들어, 다음과 같이 모듈 식별자를 선언할 수 있습니다.
module mymodule {
// 모듈 구성 요소 정의
}
의존성 관리
Java 모듈 시스템은 모듈 간의 의존성을 명시적으로 정의할 수 있게 해줍니다. 의존성을 정의하기 위해서는 module-info.java
파일 내부에서 requires
키워드를 사용하여 필요한 모듈을 명시해야 합니다. 예를 들어, 다음과 같이 의존성을 정의할 수 있습니다.
module mymodule {
requires othermodule;
// 모듈 구성 요소 정의
}
위의 예제에서 mymodule
은 othermodule
에 의존성을 가지고 있음을 나타냅니다. 이렇게 의존성을 명시적으로 정의하면 런타임 시에 모듈 간의 의존성이 해결되어야 합니다.
모듈 패키지 익스포트
모듈은 외부의 다른 모듈에서 사용할 수 있는 패키지를 정의할 수 있습니다. 이를 위해 모듈은 exports
키워드를 사용하여 패키지를 익스포트할 수 있습니다. 예를 들어, 다음과 같이 패키지를 익스포트할 수 있습니다.
module mymodule {
exports com.example.mypackage;
// 모듈 구성 요소 정의
}
위의 예제에서 mymodule
은 com.example.mypackage
패키지를 다른 모듈에서 사용할 수 있도록 익스포트합니다.
모듈 사용하기
다른 모듈에서 모듈을 사용하기 위해서는 해당 모듈을 컴파일 패스에 추가해야 합니다. 이를 위해 javac
명령어를 사용하여 컴파일할 때 --module-path
옵션을 지정합니다. 예를 들어, 다음과 같이 모듈을 컴파일할 수 있습니다.
javac --module-path <path_to_modules> <source_files>
또한, 실행할 때에는 java
명령어를 사용하여 --module
옵션을 지정하여 모듈을 실행합니다. 예를 들어, 다음과 같이 모듈을 실행할 수 있습니다.
java --module-path <path_to_modules> --module <module_name>/<main_class>
여기서 <path_to_modules>
은 모듈이 위치한 디렉토리의 경로, <source_files>
은 컴파일할 소스 파일의 경로, <module_name>
은 실행할 모듈의 이름, <main_class>
은 실행할 모듈의 메인 클래스의 이름입니다.
결론
Jigsaw 모듈 시스템은 Java 애플리케이션의 모듈화를 위한 강력한 기능을 제공합니다. 모듈 식별자를 통해 모듈마다 고유한 이름을 부여하고, 의존성을 명시적으로 관리하여 애플리케이션의 구조를 확실히 정의할 수 있습니다.