티스토리 뷰
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 |