이 게시글은 이것이 자바다(저자 : 신용권, 임경균)의 책과 동영상 강의를 참고하여 개인적으로 정리하는 글임을 알립니다.
자바 표준 모듈
표준 라이브러리는 Java 9부터 모듈화가 되어 아래의 그림처럼 Java 17 표준 모듈이 완성되었다.
화살표는 모듈 간의 의존 관계를 표시한다.
- java.base는 모든 모듈이 의존하는 기본이자 핵심 모듈이다. 또한 requires 하지 않아도 사용할 수 있다.
- java.base 모듈에는 java.lang, java.util, java.io 등의 핵심 패키지가 있고, java.lang을 제외하고 import 해서 사용할 수 있다.
- java.se는 JDK가 제공하는 모든 모듈을 제공하는 집합 모듈이다.
- 표준 라이브러리를 제한 없이 사용하고 싶을 경우에는 java.se를 모듈 기술자에 requires하면 된다.
- 모듈 기술자가 없는 프로젝트를 만들면 모듈로 인식되지 않기 때문에 자바 표준 라이브러리를 제한 없이 사용할 수 있다.
자바 표준 모듈은 왜 이렇게 많은 모듈로 이루어졌는가?
모듈이라는 개념이 없었을 때는 아무런 제한 없이 모든 기능을 쓸 수 있었지만, 단점이 하나 있었다.
바로, 아무리 간단한 프로그램일지라도 약 40MB의 용량을 차지한다는 것이다.
따라서 임베디드 기기에서는 자바 프로그램 실행 자체가 되질 않았다.
Java 8 이전 버전까지는 프로그램이 표준 라이브러리의 5%만 사용하는데도 실행하려면 전체 표준 라이브러리가 갖추어진 자바 실행 환경(JRE)이 필요했다.
따라서 모듈화를 한 이유는 필요한 모듈만으로 구성된 작은 사이즈의 JRE를 만들기 위해서이다.
이런 문제점이 계속 지적되어 모듈이라는 개념이 도입되었고, 세세하게 분해가 되어서 필요한 모듈만 쓰면 되기 때문에 프로그램의 용량을 줄일 수 있게 되었다.
java.base 모듈
- java.base는 모든 모듈이 의존하는 기본 모듈로, 모듈 중 유일하게 requires하지 않아도 사용할 수 있다.
- 이 모듈에 포함되어 있는 패키지는 대부분 자바 프로그램에서 많이 사용하는 것들이다.
우리가 흔히 사용하는 String, System, Integer, Double, Exception, RuntimeException 등의 클래스는 java.lang에 있고, 키보드 입력을 위해 사용한 Scanner는 java.util 패키지에 있다.
java.lang은 자바 언어의 기본적인 클래스를 담고 있는 패키지로, 이 패키지에 있는 클래스와 인터페이스는 import 없이 사용할 수 있다.
'Java Category > Java' 카테고리의 다른 글
[JAVA] 전이 의존과 집합 모듈 (0) | 2023.07.22 |
---|---|
[JAVA] 모듈(응용 프로그램 모듈화) (0) | 2023.07.21 |
[JAVA] 라이브러리 생성 및 불러오기 (0) | 2023.07.19 |
[JAVA] 중첩 인터페이스 (nested interface) (0) | 2023.07.18 |
[JAVA] 봉인된 인터페이스(sealed interface) (0) | 2023.07.16 |