ModuleLayer — JVM 안의 모듈 레이어

ModuleLayer — JVM 안의 모듈 레이어

ModuleLayerJVM 안의 모듈 레이어(layer of modules) 를 나타내는 클래스예요. 자바 9 모듈 시스템의 핵심 개념 중 하나로, 모듈이 클래스 로더에 매핑되어 실제로 로드되는 단위예요.

출처: Java API Reference

본문

레이어는 Configuration 안의 모듈 그래프와, 각 모듈을 ClassLoader에 매핑하는 함수로부터 만들어져요. 레이어를 만드는 것은 JVM에게 모듈에서 로드될 수 있는 클래스들을 알려 줘서, JVM이 각 클래스가 어느 모듈의 멤버인지 알 수 있게 해요.

레이어를 만들면 설정의 각 ResolvedModule에 대해 Module 객체가 만들어져요. 읽히는 각 해석된 모듈에 대해 Module은 대응하는 런타임 Module을 읽는데, 그 모듈은 같은 레이어나 부모 레이어에 있을 수 있어요.

defineModulesWithOneLoaderdefineModulesWithManyLoaders 메서드는 모든 모듈을 단일 클래스 로더에 매핑하거나, 각 모듈을 자신의 클래스 로더에 매핑하는 모듈 레이어를 편리하게 만들 수 있게 해 줘요. defineModules 메서드는 모듈을 메서드에 지정된 함수로 커스텀 클래스 로더에 매핑하는 더 고급 사례를 위한 거예요. 이 메서드들 각각 인스턴스 버전과 static 버전이 있어요. 인스턴스 메서드는 수신자를 부모 레이어로 하는 레이어를 만들고, static 메서드는 부모 레이어가 둘 이상이거나 Controller가 레이어의 모듈을 제어하는 데 필요한 더 고급 사례를 위한 거예요.

JVM은 적어도 하나의 비어있지 않은 레이어(부트 레이어)를 가지는데, 이 레이어는 JVM이 시작될 때 만들어져요. 부트 레이어는 모듈 java.base를 포함하고, "java.base"라는 이름의 모듈을 가진 JVM의 유일한 레이어예요. 부트 레이어의 모듈들은 부트스트랩 클래스 로더와 JVM에 내장된 다른 클래스 로더들에 매핑돼요. 부트 레이어는 새 레이어를 만들 때 부모로 자주 쓰여요.

관련 static 메서드

  • static ModuleLayer boot() — JVM의 부트 레이어를 반환해요.
  • static ModuleLayer empty() — 비어 있는 모듈 레이어를 반환해요.

final 클래스이고 자바 9부터 제공돼요.

더 알아보기 (Learn more)