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

Java 9 모듈(Module)의 특징과 핵심 개념 완벽 정리

Java 9 모듈이란?

모듈(Module)은 코드, 데이터, 그리고 리소스의 집합입니다. 즉, 클래스, 추상 클래스, 인터페이스와 같은 관련된 패키지와 타입들이 코드, 데이터 파일, 정적 리소스와 함께 하나로 묶인 단위를 의미합니다.

Java 9부터 도입된 모듈 시스템(Project Jigsaw)은 기존의 JAR 파일 방식보다 더 강력한 캡슐화와 명시적인 의존성 관리를 제공합니다.

모듈의 주요 특성

  • 모듈은 다른 모듈과 통신하기 위한 인터페이스를 반드시 정의해야 합니다.
  • 모듈은 모듈 인터페이스모듈 구현 사이의 명확한 분리를 정의합니다.
  • 모듈은 정보를 담고 있는 일련의 속성(properties)을 제공합니다.
  • 두 개 이상의 모듈이 서로 중첩(nested)될 수 있습니다.
  • 모듈은 명확하고 잘 정의된 책임을 가지며, 각 기능은 오직 하나의 모듈에 의해서만 구현됩니다.
  • 모듈은 다른 모듈로부터 독립적으로 테스트될 수 있어야 합니다.
  • 한 모듈에서 발생한 오류는 다른 모듈로 전파되어서는 안 됩니다.

모듈 간 의존성 설정 방법

두 개의 모듈 M1M2가 있고, 모듈 M2 안에 있는 패키지 Pkg2를 모듈 M1에서 사용하고 싶다면, 다음 두 가지 조건을 충족해야 합니다.

  • 모듈 M1이 모듈 M2에 의존한다면, M1은 자신의 선언부에 requires 키워드를 사용하여 모듈 M2를 지정해야 합니다.
  • 모듈 M2는 이 모듈에 의존하는 다른 모듈들이 패키지를 사용할 수 있도록 exports 키워드를 통해 패키지 Pkg2를 외부로 공개해야 합니다.

module-info.java 작성 예시

// M1 모듈 선언 (module-info.java)
module M1 {
    requires M2;
}

// M2 모듈 선언 (module-info.java)
module M2 {
    exports Pkg2;
}

위 예시처럼 각 모듈의 루트 디렉터리에는 module-info.java 파일을 두어 모듈의 이름, 의존성(requires), 공개 패키지(exports)를 명시적으로 선언합니다. 이를 통해 컴파일 시점에 의존성 오류를 조기에 발견할 수 있고, 불필요한 내부 API 노출을 막아 애플리케이션의 안정성과 보안성이 크게 향상됩니다.