Module — 명명된 또는 명명되지 않은 런타임 모듈
Module — 명명된 또는 명명되지 않은 런타임 모듈
Module은 명명된(named) 또는 명명되지 않은(unnamed) 런타임 모듈을 나타내는 클래스예요. 자바 9의 모듈 시스템에서 각 모듈은 이 Module 객체로 표현돼요.
본문
명명된 모듈은 이름을 가지며, 모듈 그래프가 JVM에 정의되어 모듈 레이어를 만들 때 JVM이 생성해요. 명명되지 않은 모듈은 이름이 없어요. 각 ClassLoader에는 명명되지 않은 모듈이 하나씩 있는데, getUnnamedModule() 메서드로 얻어요. 명명된 모듈에 없는 모든 타입들은 그 정의 클래스 로더의 명명되지 않은 모듈의 멤버예요.
이 클래스의 메서드가 파라미터로 받거나 반환하는 패키지 이름은 JLS 6.5.3에 정의된 패키지의 완전한 이름(fully-qualified name)이에요. 예를 들어 "java.lang"처럼요. 별도로 명시되지 않는 한, null 인자를 넘기면 NullPointerException이 던져져요.
AnnotatedElement를 구현하는 final 클래스이고, 자바 9부터 제공돼요.
주요 메서드
Module addExports(String pn, Module other)— 호출자의 모듈이 이 모듈이면, 이 모듈이 주어진 패키지를 주어진 모듈에 내보내도록 갱신해요.Module addOpens(String pn, Module other)— 이 모듈이 적어도 호출자 모듈에 패키지를 열었다면, 주어진 모듈에도 그 패키지를 열도록 갱신해요.Module addReads(Module other)— 호출자의 모듈이 이 모듈이면, 이 모듈이 주어진 모듈을 읽도록 갱신해요.Module addUses(Class<?> service)— 호출자의 모듈이 이 모듈이면, 이 모듈에 주어진 서비스 타입에 대한 서비스 의존성을 추가하도록 갱신해요.boolean canRead(Module other)— 이 모듈이 주어진 모듈을 읽을 수 있는지 여부를 나타내요. (그 외getName(),getDescriptor(),getLayer(),isExported(pn),isOpen(pn)등 다수가 있어요.)