ModuleDescriptor — 명명된 모듈을 기술하는 모듈 설명자
ModuleDescriptor — 명명된 모듈을 기술하는 모듈 설명자
ModuleDescriptor는 명명된 모듈(named module) 을 기술하고 그 각 구성 요소를 얻는 메서드를 정의하는 모듈 설명자예요. JVM 안의 명명된 모듈에 대한 모듈 설명자는 Module.getDescriptor()를 호출해 얻어요.
본문
모듈 설명자는 ModuleDescriptor.Builder 클래스를 쓰거나, 여기에 정의된 read 메서드로 모듈 선언의 이진 형태(module-info.class)를 읽어 만들 수도 있어요.
모듈 설명자는 normal, open, automatic 모듈을 기술해요. normal 모듈과 open 모듈은 의존성·내보내는 패키지·사용하거나 제공하는 서비스 등 구성 요소를 기술해요. normal 모듈은 특정 패키지를 open할 수 있어요. open 모듈의 설명자는 어떤 open 패키지도 선언하지 않지만(opens()가 빈 집합 반환), JVM에서 인스턴스화되면 모든 패키지가 open된 것처럼 취급돼요. automatic 모듈의 설명자는 의존성을 선언하지 않고(java.base에 대한 필수 의존성 제외), 내보내거나 open한 패키지도 선언하지 않아요. automatic 모듈은 해석 중 특별 취급을 받아 설정의 모든 다른 모듈을 읽어요. JVM에서 인스턴스화되면 모든 unnamed 모듈을 읽고, 모든 패키지가 export·open된 것처럼 취급돼요.
ModuleDescriptor 객체는 불변(immutable) 이라 여러 동시 스레드에서 안전하게 사용할 수 있어요.
Comparable<ModuleDescriptor>를 구현하는 클래스로, 자바 9부터 제공돼요.
중첩 클래스
ModuleDescriptor.Builder— 모듈 설명자를 만들기 위한 빌더예요.ModuleDescriptor.Exports— 모듈이 내보내는 패키지를 나타내요.ModuleDescriptor.Modifier— 모듈 설명자의 수정자(open, automatic, synthetic 등)를 나타내는 enum이에요.ModuleDescriptor.Opens— 모듈이 open한 패키지를 나타내요.ModuleDescriptor.Provides— 모듈이 제공하는 서비스를 나타내요.ModuleDescriptor.Requires— 모듈의 의존성을 나타내요.ModuleDescriptor.Version— 모듈 버전을 나타내요.
주요 메서드
String name()— 모듈 이름을 반환해요.Set<ModuleDescriptor.Requires> requires()— 모듈의 의존성 집합을 반환해요.Set<ModuleDescriptor.Exports> exports()— 모듈이 내보내는 패키지 집합을 반환해요.Set<ModuleDescriptor.Opens> opens()— 모듈이 open한 패키지 집합을 반환해요.Set<String> uses()— 모듈이 사용하는 서비스 집합을 반환해요.Set<ModuleDescriptor.Provides> provides()— 모듈이 제공하는 서비스 집합을 반환해요.Version version()— 모듈 버전을 반환해요 (없으면 null).