[java] Jigsaw 모듈 식별자와 의존성 관리

Java 9부터 도입된 Jigsaw 모듈 시스템은 큰 규모의 애플리케이션을 작은 모듈로 분리하여 개발과 관리를 용이하게 해주는 기능입니다. 이 기능을 사용하면 모듈에 대한 식별자를 정의하고 의존성을 관리할 수 있습니다.

모듈 식별자

모듈 식별자는 모듈에 대한 고유한 이름이며, module-info.java 파일에 정의됩니다. 모듈 식별자는 module 키워드를 사용하여 선언됩니다. 예를 들어, 다음과 같이 모듈 식별자를 선언할 수 있습니다.

module mymodule {
    // 모듈 구성 요소 정의
}

의존성 관리

Java 모듈 시스템은 모듈 간의 의존성을 명시적으로 정의할 수 있게 해줍니다. 의존성을 정의하기 위해서는 module-info.java 파일 내부에서 requires 키워드를 사용하여 필요한 모듈을 명시해야 합니다. 예를 들어, 다음과 같이 의존성을 정의할 수 있습니다.

module mymodule {
    requires othermodule;
    // 모듈 구성 요소 정의
}

위의 예제에서 mymoduleothermodule에 의존성을 가지고 있음을 나타냅니다. 이렇게 의존성을 명시적으로 정의하면 런타임 시에 모듈 간의 의존성이 해결되어야 합니다.

모듈 패키지 익스포트

모듈은 외부의 다른 모듈에서 사용할 수 있는 패키지를 정의할 수 있습니다. 이를 위해 모듈은 exports 키워드를 사용하여 패키지를 익스포트할 수 있습니다. 예를 들어, 다음과 같이 패키지를 익스포트할 수 있습니다.

module mymodule {
    exports com.example.mypackage;
    // 모듈 구성 요소 정의
}

위의 예제에서 mymodulecom.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 애플리케이션의 모듈화를 위한 강력한 기능을 제공합니다. 모듈 식별자를 통해 모듈마다 고유한 이름을 부여하고, 의존성을 명시적으로 관리하여 애플리케이션의 구조를 확실히 정의할 수 있습니다.