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

Java 9 module-info 파일에서 exports 절의 역할과 사용법

Java 9 모듈 시스템에서 exports 절이란?

모듈(Module)은 이름을 가진 코드데이터의 결합체입니다. 모듈은 다른 모듈에 대한 의존성을 선언하고, 외부에서 접근 가능한 public 타입을 포함하는 패키지를 내보내며(export), 자신이 사용하는 서비스나 제공하는 서비스 구현체를 명시합니다. 이러한 모든 정보는 module-info.java 파일에 정의되며, 이 파일은 모듈의 루트 디렉터리에 위치합니다.

module-info.java 파일에서 사용할 수 있는 exports 절은 두 가지 형태가 있습니다.

1) exports <패키지>: 패키지 전체 공개

Java 9부터는 기본적으로 모듈 내부의 public 타입이 더 이상 모듈 외부에서 보이지 않습니다. 특정 패키지의 public 타입을 다른 모듈에서 사용할 수 있게 하려면 해당 패키지를 반드시 export해야 합니다.

여기서 주의할 점은 export가 타입 단위가 아닌 패키지 단위로 이루어진다는 것입니다. 또한 하위 패키지(sub-package)는 자동으로 export되지 않으므로, 필요하다면 각각 별도로 선언해야 합니다.

예를 들어, 다른 모듈이 tp.com.tutorialspoint.model 패키지의 클래스와 인터페이스를 사용하도록 허용하려면 다음과 같이 작성합니다.

module com.tutorialspoint.model {
    exports tp.com.tutorialspoint.model;
}

중요한 점은 하나의 패키지는 오직 하나의 모듈에만 존재할 수 있다는 것입니다. 동일한 패키지가 여러 모듈에 걸쳐 있으면 컴파일 시 다음과 같은 오류가 발생합니다.

Error:(1, 1) java: package exists in another module:

2) exports <패키지> to <모듈>: 특정 모듈에만 선택적 공개

두 번째 형태인 exports ... to 절을 사용하면 모듈의 보안성을 한층 강화할 수 있습니다. 특정 패키지의 가시성을 지정된 모듈 목록으로 제한하여, 나열된 모듈만 해당 클래스에 접근할 수 있도록 하는 것입니다.

예를 들어, model 패키지를 GUI 모듈에만 공개하고 싶다면 다음과 같이 작성합니다.

module com.tutorialspoint.model {
    exports tp.com.tutorialspoint.model
        to com.tutorialspoint.gui;
}

이처럼 exports 절을 활용하면 캡슐화 수준을 세밀하게 제어할 수 있어, 불필요한 API 노출을 막고 모듈 간 의존 관계를 명확하게 관리할 수 있습니다.