라이브러리
- 클래스와 인터페이스를 모아 둔 것을 라이브러리라고 함
- 대개 .jar파일로서 보관하게 된다
- CLASSPATH에 지정하여, 해당 라이브러리를 사용하게 된다
import [패키지명].[클래스명];
모듈
- 라이브러리 처럼 가져다 사용할 수 있다
- 공개와 은닉이 존재한다
- module-info.java인 모듈기술자를 정의해야한다
[키워드]
외부로 노출 : exports
module 가져다 쓰기 : requires
package pack1;
public class B{
public void method(){
System.out.println("B");
}
}
package pack2;
public class A{
public void method(){
System.out.println("A");
}
}
[module-info.java]
module my_module_a{
exports pack1;
exports pack2;
}
[module-info.java]
module my_application_2{
requires my_module_a;
}
import pack1.A;
import pack2.B;
public class Main{
public static void main(String[] args){
//...
}
}
전이 모듈
- 모듈간의 의존관계 설정방법
- transitive 사용
[module-info.java]
module my_module_a{
exports pack1;
requires transitive my_module_b; // 의존 설정 (따로 my_module_b를 require하지 않아도 됨)
}
집합 모듈
- 모듈들을 집합으로 묶어놓는 역할
- 모듈들을 requires
[module-info.java]
module my_module{
requires transitive my_module_a;
requires transitive my_module_b;
}
리플렉션 허용
- 리플렉션
- 실행 도중에 타입 (클래스, 인터페이스 등)을 검사하고 구성멤버를 조사하는 것
- opens를 통해 은닉된 패키지를 열고 확인할 수 있음
//모듈 전체 허용
open module 모듈명{
}
// 지정된 패키지 리플렉션 허용
module 모듈명{
opens 패키지1;
opens 패키지2;
//..
}
// 지정된 패키지 특정 모듈
module 모듈명{
opens 패키지1 to 외부모듈명1, 외부모듈명2...
opens 패키지2 to 외부모듈명1, 외부모듈명2...
//...
}