여러 프로그램에서 공통으로 사용될 수 있는 클래스와 인터페이스의 모음
→ 여러.class파일을 묶어 압축한.jar파일의 형태
이때, 유사한 클래스와 인터페이스는 묶어서 패키지로 구성됨
자바 라이브러리의 업그레이드 버전
Java 9부터 모듈 시스템 도입 class -> package -> module
관련 패키지를 묶어 모듈 단위로 캡슐화
다른 모듈을 사용할 수 있음
일부 패키지를 공개 패키지로 노출
→ 패키지의 접근 제한 설정 가능 (기본적으로 모듈 내 패키지는 비공개)
자바 프로젝트에서 module-info.java 파일에 모듈에 대한 정보 기술
module-info.java파일에 모듈의 이름과 모듈 간의 관계를 기술
'자바 모듈 프로젝트'의 src 폴더에 위치함
→ 배포 과정에서는 .jar 파일의 루트 폴더에 위치
module descriptor 파일이라고 함
모듈의 이름, 모듈이 requires하는 다른 모듈(의존성), 모듈이 exports하는 패키지(공개 API)를 명시
module my_mod_a {
requires my_mod_b;
}
module my_mod_b {
exports package_a;
exports package_b;
}
💡 requires 모듈과 exports 패키지
exports패키지: 프로젝트의 패키지를 다른 모듈에서 사용할 수 있게 외부에 제공 (기본적으로는 공개❌exports사용해야 함)requires모듈: 프로젝트에서 해당 모듈이 제공한 패키지를 사용(의존)하겠다는 의미
→ 이러한 선언이 있어야import가능함
requires와 exports
requires키워드는 해당 모듈(A)가 다른 모듈(B)에 의존함을 선언

위 그림은 모듈 A가 모듈 B가 제공(exports)하는 패키지를 사용하겠다는 의미
requires transitive모듈이 다른 모듈에 의존함을 표현하며, 또 현재 모듈이 사용하는 모든 모듈에 의존성을 전파함
→ 즉, 자동으로 의존 관계가 추가됨

위 그림에서 MyProject는 pack_c와 pack_d를 사용할 수 있음
Java 표준 모듈
Java 9부터 모듈 개념이 도입됨
→ 자바 표준 라이브러리가 모듈화 됨
java.xxx 모듈을 표준 모듈 또는 플랫폼 모듈이라 함
java.base 모듈자바 플랫폼에서 가장 기본이 되는 모듈
java.base 모듈을 사용하기 위해, requires 키워드 필요❌
java.lang, java.math, java.net, java.io, java.nio, java.util 등의 패키지를 포함
→ java.lang은 import 필요❌
module-info.java 파일자바 프로젝트에서 이 파일을 사용하고, java.base 모듈 내에 없는 패키지를 사용해야 한다면 requires 키워드를 사용하여 명시적 사용 선언해야 함
if) 프로그램에서 java.sql 패키지를 import해서 사용하는 경우java.sql 패키지는 java.sql 모듈에서 exports하고 있음java.sql 모듈을 requires 해야 함