패키지 은닉
- 모듈 기술자(module-info)에서 exports 키워드를 사용하여 내부 패키지 중 외부 패키지에서 사용할 패키지를 지정할 수 있습니다.
- exports된 패키지는 외부로 노출되며, exports되지 않은 패키지는 자동적으로 은닉이 됩니다.
- 모듈이 패키지를 은닉하는 이유는 아래와 같습니다.
- 모듈 사용 방법 통일: 외부와 접촉하는 패키지만 노출하여 모듈의 사용 방법을 통일합니다.
- 쉬운 수정: 접촉 모듈에 영향을 주는 다른 모듈을 수정해도 외부에 영향을 주지 않습니다.
모듈 기술자에서 패키지 은닉을 하는 방법
module 모듈이름 {
// 외부 노출을 허용하는 패키지
exports 패키지이름;
...
}
전이 의존
- 모듈 기술자에서 requires 키워드를 사용하여 모듈간의 의존 관계를 지정할 수 있습니다.
- 모듈간 다중적으로 의존 관계가 형성되는 경우 모듈 기술자에 하위 모듈까지 모두 기술해줘야 하는 불편이 있습니다.
- 이 경우 transitive 키워드를 사용하여 하위 모듈을 선언해주면 상위 모듈에 대한 의존성을 전이 시킬 수 있습니다.
모듈 기술자에서 전이 의존을 하는 방법
module 메인모듈이름 {
requires 패키지이름;
...
}
module 중간모듈이름1 {
exports 패키지;
requires transitive 중간모듈이름2;
}
module 중간모듈이름2 {
...
}
집합 모듈
- 집합 모듈은 여러 모듈을 모아놓은 모듈을 뜻합니다.
- 모듈간 의존 관계를 일일이 기술하기 어려울 때 집합 모듈을 생성하여 활용할 수 있습니다.
- 집합 모듈은 자체적인 패키지를 가지지 않고, 모듈 기술자에 전이 의존 설정만 합니다.
리플렉션 허용
- 은닉된 패키지는 기본적으로 다른 모듈에 의한 리플렉션(Reflection)을 허용하지 않습니다.
(리플렉션: 프로그램 실행 도중 타입을 검사하고 구성하는 멤버를 조사하는 것) - 하지만 경우에 따라 은닉된 패키지도 리플렉션을 해야하는 경우가 있는데, 모듈 기술자의 선언을 통해 이를 설정할 수 있습니다.
- 패키지의 리플렉션 허용은 open, opens 키워드를 활용하여 지정할 수 있습니다.
모듈 기술자에서 패키지 리플렉션을 하는 방법
// 모듈 전체를 리플렉션 허용
open module 모듈이름 {
...
}
// 지정된 패키지에 대해 리플렉션 허용
module 모듈이름 {
opens 패키지;
opens 패키지;
...
}
// 지정된 패키지에 대해 특정 외부 모듈에서만 리플렉션 허용
module 모듈이름 {
opens 패키지 to 외부모듈명1, 외부모듈명2;
opens 패키지 to 외부모듈명;
...
}
'Programing Language > Java' 카테고리의 다른 글
[Java] 자바 오브젝트 클래스(Java Object Class) (0) | 2022.07.18 |
---|---|
[Java] 자바 표준 라이브러리(Java Standard Library) (0) | 2022.07.18 |
[Java] 자바의 라이브러리와 모듈(Java Library & Module) (0) | 2022.07.18 |
[Java] 자바 패키지(Java Package) (0) | 2022.07.16 |
[Java] 예외 전가(Exception Imputation) (0) | 2022.07.14 |