14. 자바 모듈 시스템
주요내용
- 자바 모듈 시스템을 설계한 이유
 - 주요 구조: 모듈 declarations, requires, exports 지시어
 - 기존 자바 아카이브(JAR)에 적용되는 자동 모듈
 - 모듈화와 JDK 라이브러리
 - 모듈과 메이븐 빌드
 - 주요 구조외 모듈 지시어 간단 요약
 
자바 모듈 시스템을 설계한 이유#
- 패키지와 JAR 수준에서 캡슐화를 거의 지원하지 않음
 - 클래스 경로의 한계
- 클래스 경로에 같은 클래스를 구분하는 버전 개념이 없음
 - 명시적 의존성 지원 X (다른 JAR의 클래스를 사용하라고 명시적으로 지정할 수 없음)
 
 
자바 모듈 시스템#
패키징 명령어 정리
- 실행 옵션
--module-path: 어떤 모듈을 로드할 지 지정--module: 실행할 메인 모듈과 클래스 지정
 
exports#
module-info.java
- 기본적으로 모듈 내의 모든 것은 캡슐화 됨
 - 화이트 리스트 기반, 명시적으로 공개할 것을 
exports로 지정해주어야 함 
requires#
module-info.java
- requires를 통해 해당 모듈에 필요한 모듈을 명시할 수 있음
 
컨벤션#
도메인의 역순으로 모듈(패키지)를 구성하는 것이 권장 모듈 이름 컨벤션
자동 모듈#
외부 의존성을 추가할 때, 불러오는 JAR 는 자바 모듈 기능을 사용하고 있지 않더라도 자동 모듈이라는 형태로 적절하게 변환되어 사용 함
예제#
https://github.com/DaehunGwak/study-java/tree/main/modernjava-module-2/expenses