Java 9에서 도입된 가장 중요한 기능 중 하나가 바로 모듈(Module)입니다. 모듈을 활용하면 코드를 '모듈'이라고 불리는 더 작은 단위의 구성 요소로 분리할 수 있습니다. 이는 각 모듈이 고유한 책임을 가지며, 정상적으로 동작하기 위해 필요한 다른 모듈에 대한 의존성을 직접 선언한다는 의미입니다.
Java 9에서 모듈러 프로젝트 만드는 방법
먼저 module-info.java라는 이름의 파일을 생성하고, 해당 모듈(패키지)에 추가해야 합니다. 예를 들어 패키지 이름이 com.mycompany.mypackage라면, 이 파일은 동일한 패키지 경로인 (src/com.mycompany.mypackage/module-info.java)에 위치하게 됩니다.
모듈은 exports와 requires 표현식을 선언하는 방식으로 정의할 수 있습니다.
1. 다른 모듈을 필요로 하는 경우 (requires)
우리 모듈이 다른 모듈의 기능을 사용해야 한다면 아래와 같이 작성합니다.
module com.tutorialspoint.greetings {
requires org.tutorix;
}2. 모듈의 내용을 외부에 공개하는 경우 (exports)
반대로 우리 모듈의 패키지 내용을 다른 모듈에 노출하고 싶다면 아래와 같이 작성합니다.
module org.tutorix {
exports org.tutorix;
}모듈 사용의 주요 이점
- 강력한 보안성: 모듈은 불필요한 내부 정보를 안전하게 숨길 수 있습니다. 모듈은 오직 export된 패키지의 내용에만 접근할 수 있으며, 다른 모듈의 전체 콘텐츠나 public/internal API에는 접근할 수 없습니다. 즉, 한 모듈에서 public으로 선언된 요소라 하더라도 export되지 않으면 다른 모듈에서는 접근이 불가능합니다.
- 경량화와 성능 향상: 필요한 모듈만 선택적으로 사용할 수 있기 때문에 애플리케이션이 더 작아지고 실행 속도도 빨라집니다.
- 소형 기기 배포 용이: 메모리 요구 사항이 크게 줄어들어 IoT 기기 등 저사양 소형 디바이스에도 손쉽게 배포할 수 있습니다.
- 단일 책임 원칙(SRP) 지원: 각 모듈이 하나의 명확한 역할만 담당하므로 단일 책임 원칙을 자연스럽게 지킬 수 있습니다.
- 낮은 결합도 유지: 모듈 간 의존 관계가 명시적으로 선언되므로 컴포넌트 간 결합도(coupling)를 낮추고 유지보수성을 높이기 쉽습니다.