모듈시스템(10, jigsaw)
ㆍ자바에서 제공하는 패키지보다 높은 수준의 새로운 구조 단위
ㆍ모듈시스템은 자바 9에 Jigsaw 프로젝트로 부터 도입
사용법
ㆍ의존하는 다른 모듈(requires)과 다른 모듈에서 접근할 수 있는 항목(exports)을 포함한 모듈에 대한 설정이 들어있는 module-info.java 파일을 생성함
▶ 예시 - Decoder 모듈
module Decoder{
requires Reader;
exports com.decoder;
}
ㆍ 위 코드의 의미: Decoder 모듈은 Reader 모듈에 종속되고, com.decoder 패키지를 다른 모듈에 노출함 (다른 모듈은 오직 decoder 패키지에만 접근 가능)
▶ 예시 - Reader 모듈
module Reader{
exports org.reader;
}
ㆍ 위 코드의 의미: Reader 모듈이 다른 모듈에 의존하지 않고, 다른 모듈은 해당 모듈 내의 org.reader 패키지에만 접근할 수 있음
▶ 예시 - Reader, Decoder 모듈의 클래스
package org.reader;
public class Scanner{
public static String name() {
return "scanner";
}
}
package com.decoder;
import org.reader.Scanner;
public class Main {
public static void main(String[] args) {
System.out.format("Reading with a %s!%n", Scanner.name());
}
}
ㆍ Decoder 모듈은 Scanner 클래스를 사용하여 디코딩할 데이터를 검색하기 위해 Reader 모듈이 필요하다.
모듈 시스템의 장점
ㆍ 보안성
- exports 하지 않은 클래스 코드를 모듈 내부에서 안전하게 유지할 수 있음
ㆍ 클래스 경로 지옥 문제에서 벗어날 수 있음
- 이미 있는 클래스 경로에 jar가 이전 버전으로 판명나는 등의 문제
ㆍ더 쉬운 테스트 가능
- 전체 프로젝트를 테스트하는 대신 각 모듈을 테스트하고 모듈이 예상대로 작동하는지 확인
ㆍ더 나은 유지 보수 가능
- 한 모듈의 코드를 변경해도 모듈이 정상적으로 작동하는 한 다른 모듈의 클래스에 영향을 주지 않음
- 전체 프로젝트 대신 모듈만 다시 빌드 가능
출처
모던 자바인 액션
https://blog.idrsolutions.com/2017/05/java-9-modularity-explained-in-5-minutes/
'자바' 카테고리의 다른 글
[Java] 자바의 스트림(Stream) (0) | 2021.09.09 |
---|---|
[Java] 자바의 레코드(Record) (0) | 2021.09.09 |
[Java] 컬렉션 프레임워크(Collection Framework) (0) | 2021.09.05 |
[Java] Enum과 싱글톤(Singleton) (0) | 2021.08.31 |
[Java] @value 어노테이션을 통해 의존성 주입시 주의사항 (0) | 2021.08.30 |
댓글