티스토리 뷰

JPMS(Java Platform Module System)

  • Java 9에서 도입된 모듈 시스템으로, Java 애플리케이션과 라이브러리를 모듈 단위로 구성하고 관리
  • JPMS는 코드의 재사용성, 유지보수성, 보안성 등을 향상시키기 위해 설계

 

JPMS 특징 

  • 모듈 정의:
    • 모듈은 module-info.java 파일을 통해 정의 되며 모듈의 이름, 의존성, 노출할 패키지 등을 명시
module my.module {
    requires another.module;
    exports com.mymodule.package;
}

 

 

  • 의존성 관리:
    • requires 키워드를 사용하여 다른 모듈에 대한 의존성을 명시
    • 모듈 간의 명시적인 의존 관계를 정의함으로써 의존성 충돌을 줄여 관리가 쉬움
module my.module {
    requires another.module; // requires 키워드 : 모듈이 컴파일 타임과 런타임 모두 다른 모듈 필요
    requires static another.module; // 모듈이 컴파일 타임에 다른 모듈을 필요O, 런타임에는 반드시 필요X
    requires transitive another.module; // 모듈이 다른 모듈을 필요로 하며, 이 의존성을 자신을 의존하는 모든 모듈에게 전파
}
  • 캡슐화:
    • exports 키워드를 사용하여 외부에 공개할 패키지를 명시
    • 기본적으로 모듈 내의 패키지는 다른 모듈에서 접근할 수 없으며, 명시적으로 공개된 패키지만 접근할 수 있음
module my.module {
    exports com.mycompany.mypackage;
}
  •  서비스:
    • 모듈은 provides와 uses 키워드를 통해 서비스 제공자와 소비자를 정의할 수 있음
    • 이는 느슨한 결합을 촉진하고, 런타임에 서비스 제공자를 동적으로 교체할 수 있게 해줌
module my.module {
    provides com.mymodule.MyService with com.mymodule.impl.MyServiceImpl;
    uses com.mymodule.MyService;
}

 

  • 강화된 보안:
    • 모듈 시스템은 모듈 간의 경계를 명확히 하여 클래스 경로에 존재하는 코드의 무작위 접근을 방지하고, 보안성을 강화.

 

JPMS의 장점

  • 유지보수성: 모듈 단위로 코드를 구성하여 코드의 복잡성을 줄이고, 이해하기 쉬움
  • 재사용성: 모듈을 독립적으로 개발하고 테스트할 수 있어 코드의 재사용성을 높임
  • 충돌 방지: 명시적인 모듈 의존성 정의로 인해 클래스패스 충돌을 방지
  • 성능: 필요 없는 모듈을 로드하지 않아 런타임 성능을 향상

JPMS는 대규모 프로젝트나 라이브러리 개발 시 특히 유용하며, 모듈화된 구조는 현대적인 소프트웨어 개발에서 중요한 역할

 
 

 

Java 9 이상에서는 deep 리플렉션을 사용하려면 추가적인 설정이 필요 (shallow reflection은 키워드 없어도됨)

특정 패키지를 외부에서 리플렉션으로 접근 가능하게 하려면 module-info.java 파일에 opens 지시어를 사용

  • open : 전체 코드에 대한  reflection 허가 
  • opens : 특정 패키지에 대한 reflection 허가 
  • opens ... to ... : 특정 패키지만 특정 모듈에 reflection 허가 

reflection 관련 : https://forest-33.tistory.com/53

 

Java 리플렉션 reflection

Java 리플렉션(Reflection)런타임에 클래스를 조사하고 조작할 수 있는 기능리플렉션을 사용하면 클래스, 메소드, 필드 등의 정보를 런타임에 동적으로 가져오거나 수정할 수 있음.컴파일 타임에 알

forest-33.tistory.com

 

 


 

'IT > Java' 카테고리의 다른 글

JAVA 9 변경 사항들  (0) 2024.08.06
Java 리플렉션 reflection  (0) 2024.08.06
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/02   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
글 보관함