Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java 9 모듈의 세 가지 컴파일 모드 완벽 정리 (레거시·단일·멀티)

모듈(Module)은 패키지들을 담는 컨테이너입니다. 각 모듈에는 모듈 디스크립터(module descriptor)가 포함되어 있으며, 여기에는 모듈 이름, 모듈 의존성(즉, 이 모듈이 의존하는 다른 모듈의 이름), 그리고 내보내는(export) 패키지의 이름이 기술됩니다. 내보낸 패키지는 해당 모듈에 의존하는 모듈만 사용할 수 있습니다.

module com.tutorialspoint.app {
    /** com.tutorialspoint.app 모듈이 의존하는 모듈 선언 */
    requires com.tutorialspoint.services;
    /** 다른 모듈에서 사용할 수 있도록 공개하는 패키지 선언 */
    exports com.tutorialspoint.app.util;
}

Java 9의 모듈 시스템은 레거시 모드(Legacy Mode), 단일 모듈 모드(Single Module Mode), 멀티 모듈 모드(Multi-Module Mode)라는 세 가지 컴파일 모드를 제공합니다.

모듈의 컴파일 모드 종류

  • 1. 레거시 모드(Legacy Mode)

    --source, --target, --release 옵션으로 정의된 컴파일 환경이 8 이하일 때 활성화됩니다. 이 모드에서 컴파일러는 Java 8 이전 버전과 동일하게 동작하며, 모듈 관련 옵션(--module-path) 대신 전통적인 옵션(classpath 등)을 사용할 수 있습니다. 이 모드로 컴파일된 코드는 런타임에 이름 없는 모듈(unnamed module)로 실행됩니다.

  • 2. 단일 모듈 모드(Single Module Mode)

    컴파일 환경이 9 이상이고 --module-source-path 옵션을 사용하지 않을 때 활성화됩니다. 이 모드에서는 코드가 전통적인 패키지 계층 디렉터리 구조로 구성되며, module-info.java 파일을 포함하고 classpath가 아닌 module path에서 실행됩니다. 이 구조에서는 module-info.java 파일을 src 디렉터리 바로 아래에 배치하면 됩니다. 하나의 디렉터리 트리에는 여러 개의 module-info.java 파일을 둘 수 없기 때문에 단일 모듈 모드라고 부릅니다.

  • 3. 멀티 모듈 모드(Multi-Module Mode)

    컴파일 환경이 9 이상이고 --module-source-path 옵션을 사용할 때 활성화됩니다. 이 모드에서는 여러 개의 모듈을 같은 소스 디렉터리 아래에 배치할 수 있습니다. 컴파일 시점에 메인 소스 디렉터리를 --module-source-path 옵션으로 지정하며, 각 개별 모듈의 소스 트리는 메인 소스 디렉터리 아래의 자체 하위 디렉터리에 위치시킵니다.

정리하면, Java 8 이하 환경에서는 레거시 모드가, Java 9 이상에서는 module-info.java 파일의 수와 --module-source-path 옵션 사용 여부에 따라 단일 모듈 모드 또는 멀티 모듈 모드가 적용됩니다. 프로젝트 규모와 모듈화 요구 사항에 맞게 적절한 컴파일 모드를 선택하는 것이 중요합니다.