[java] Jigsaw 모듈의 구성 요소

Java 9에서 추가된 Jigsaw 모듈 시스템은 자바 애플리케이션을 모듈화할 수 있는 강력한 도구입니다. Jigsaw를 사용하면 애플리케이션의 기능을 모듈 단위로 분리하여 개발하고 관리할 수 있습니다. 이 글에서는 Jigsaw 모듈의 구성 요소에 대해 알아보겠습니다.

모듈 (Module)

Modular Java 애플리케이션에서 기능을 정의하고 구현하는 단위입니다. 모듈은 소스 코드와 리소스, 라이브러리와 같은 종속성을 포함할 수 있으며, 다른 모듈과의 상호 작용을 위한 공개 API를 정의할 수 있습니다.

모듈 디렉토리 구조

모듈은 모듈 파일과 그에 따른 디렉토리 구조로 작성되어야 합니다. 모듈 디렉토리 구조는 아래와 같습니다.

my-module
├── module-info.java
├── com
│   └── example
│       └── MyModuleClass.java
└── resources
    └── my-resource.txt

의존성 (Dependency)

모듈 간에 필요한 의존성을 정의하는 구성 요소입니다. 모듈은 다른 모듈에 종속성을 선언하여 필요한 클래스와 리소스를 사용할 수 있습니다. 이를 통해 모듈 간의 상호 작용을 효과적으로 관리할 수 있습니다.

모듈 디스크립터 파일 (Module Descriptor)

모듈이 의존하는 다른 모듈을 명시적으로 선언하는 모듈 디스크립터 파일은 module-info.java로 작성됩니다. 이 파일은 모듈의 이름, 의존 모듈, 내보내는 패키지 등의 정보를 포함합니다.

module mymodule {
    requires othermodule;
    exports com.example;
}

서비스 (Service)

모듈에서 제공하는 기능을 외부에 공개하는 방법입니다. 서비스는 인터페이스와 그에 대한 구현체로 구성됩니다. 모듈은 구현체를 service-provider 폴더에 제공하여 다른 모듈에서 해당 구현체를 사용할 수 있도록 합니다.

리플렉션 (Reflection)

Jigsaw에서는 모듈화된 코드에 대한 리플렉션을 통해 런타임 상에서 모듈, 클래스, 패키지 등에 접근할 수 있습니다. 이를 통해 모듈 간의 동적인 상호 작용이 가능해지며, 필요한 경우에만 리플렉션을 사용하여야 합니다.

결론

Jigsaw 모듈 시스템은 자바 애플리케이션의 모듈화를 통해 코드의 가독성과 유지 보수성을 향상시키는 강력한 도구입니다. 모듈, 의존성, 서비스, 리플렉션 등의 구성 요소를 적절하게 활용하여 애플리케이션의 구조를 개선할 수 있습니다.

참고 문서: Java Platform, Standard Edition on the Java JDK 9 Documentation