JAVA · 디자인패턴
모듈 시스템 — module-info.java
Java 9+의 모듈 시스템(JPMS)으로 강한 캡슐화를 구현합니다. module-info.java에서 공개할 패키지와 의존성을 명시적으로 선언하여 대규모 애플리케이션의 구조를 강화합니다.
핵심 설명
Java 9+의 모듈 시스템(JPMS)으로 강한 캡슐화를 구현합니다. module-info.java에서 공개할 패키지와 의존성을 명시적으로 선언하여 대규모 애플리케이션의 구조를 강화합니다.
Java code
// module-info.java (모듈 정의)
module com.example.app {
// 의존성 선언
requires java.sql;
requires java.logging;
requires transitive com.example.core; // 전이적 의존성
// 공개 패키지
exports com.example.app.api;
exports com.example.app.model;
// 특정 모듈에만 공개 (리플렉션 포함)
opens com.example.app.internal to com.example.framework;
// 서비스 제공 & 소비
uses com.example.app.spi.Plugin;
provides com.example.app.spi.Plugin
with com.example.app.plugins.DefaultPlugin;
}
// === 사용 예 ===
// com.example.app.api 패키지 (exports됨 — 외부 접근 가능)
package com.example.app.api;
public class UserService {
public record User(long id, String name, String email) {}
public User findById(long id) {
// internal 패키지는 외부에서 접근 불가
return new User(id, "홍길동", "hong@example.com");
}
}학습 팁
requires transitive는 이 모듈을 사용하는 모듈도 해당 의존성을 자동으로 읽을 수 있게 합니다. opens는 리플렉션(Spring, Hibernate 등)을 위해 런타임에만 패키지를 개방합니다.
주의할 점
exports하지 않은 패키지는 다른 모듈에서 컴파일 타임에 접근할 수 없습니다. 기존 라이브러리가 모듈화되지 않은 경우 자동 모듈(automatic module)로 사용할 수 있지만, 이름 충돌에 주의하세요.
자주 묻는 질문
모듈 시스템 — module-info.java란 무엇인가요?
Java 9+의 모듈 시스템(JPMS)으로 강한 캡슐화를 구현합니다. module-info.java 에서 공개할 패키지와 의존성을 명시적으로 선언하여 대규모 애플리케이션의 구조를 강화합니다.
모듈 시스템 — module-info.java 학습 시 주의할 점은 무엇인가요?
exports 하지 않은 패키지는 다른 모듈에서 컴파일 타임에 접근할 수 없습니다. 기존 라이브러리가 모듈화되지 않은 경우 자동 모듈(automatic module)로 사용할 수 있지만, 이름 충돌에 주의하세요.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.