모듈이란
모듈화는 패키지보다 더 높은 수준의 묶음을 제공한다.
재사용할 수 있는 패키지들을 묶은 것을 말한다.
다음은 모듈 요소이다.
- 고유한 이름을 가진 재사용 가능한 관련 패키지
- 리소스 (이미지, XML 파일)
- 모듈 기술자가 지정하는 내용
모듈 기술자
모듈 기술자는 다음을 설명한다.
- 해당 모듈의 이름
- 해당 모듈의 종속성
- 다른 모듈이 명시적으로 해당 모듈을 사용할 수 있도록 만드는 패키지
- 해당 모듈이 제공하는 서비스
- 해당 모듈이 사용하는 서비스
- 리플렉션을 허용하는 다른 모듈
모듈화가 필요한 이유
- 신뢰성
- 모듈화는 컴파일 타임, 런타임 모두에서 모듈 간의 종속성을 인식한다.
- 시스템은 종속성을 통해 앱에 필요한 모듈을 결정할 수 있다.
- 강한 캡슐화
- 모듈 내 패키지는 모듈이 명시적으로 내보내는 경우에만 다른 모듈에서 접근할 수 있다.
- 이는 공격자가 접근할 수 있는 클래스가 적어져서 보안이 향상된다.
- 확장성
- 이전 자바 버전에는 엄청난 수의 패키지로 구성되어서 개발, 유지, 발전에 어려움을 겪었다.
- 현재는 여러 모듈로 나눠져 있고 원할 경우 모듈을 새로 만들거나 추가할 수 있다.
- 무결성
- 자바 9 이전에 앱에서 의도치 않은 많은 클래스를 사용할 수 있었다.
- 모듈화를 통해 이러한 내부 API는 실제로 캡슐화 되어 앱에서 숨겨진다.
- 성능
- JVM은 필요한 필수 유형이 특정 모듈에만 있다는 것을 미리 알고 있을 때 효과적으로 최적화할 수 있다.
참고
https://www.oracle.com/corporate/features/understanding-java-9-modules.html
http://www.soen.kr/book/java/book/14-3.htm