[이것이 자바다] 09. 라이브러리
안녕하세요. 이번에는 자바의 라이브러리와 모듈에 대해 정리한 내용입니다.
이 부분도 매우 중요합니다. 사실 개발은 자기가 전부 만드는것보다는 남이 만든것을 가져다가 사용하는것이 대부분이죠. 그리고 그렇게 도움받고 도움주면서 코딩 생태계가 이렇게 커졌다고 생각합니다.
1. 라이브러리(Library)
- 프로그램 개발에 바로 가져다 쓸 수 있는 클래스와 인터페이스들의 묶음입니다.
- 이미 만들어진 라이브러리를 활용 복잡한 기능을 쉽고 빠르게 구현 가능합니다.
- JAR (Java ARchieve) 파일
- 라이브러리는 보통
.jar라는 압축 파일 형태로 제공됩니다. - 파일 안에는 클래스와 인터페이스의 바이트코드(
.class파일)들이 압축되어 있습니다.
- 라이브러리는 보통
- Classpath (클래스패스)
- JAR 파일의 위치를 알려주는 경로입니다.
- 콘솔 실행 시:
java -classpath옵션으로 직접 경로 지정하거나CLASSPATH환경 변수에 경로 추가합니다. - IDE (이클립스 등) 사용 시: 프로젝트의 Build Path 설정에 라이브러리 JAR 파일을 추가합니다.
2. 모듈(Module)
- 단순한 클래스 묶음을 넘어 패키지 관리 기능까지 포함된, 더 발전된 형태의 라이브러리입니다.
.jar파일 형태이지만, 내부에 모듈 기술자(module-info.java) 포함합니다.
| 구분 | 일반 라이브러리 (JAR) | 모듈 (Modular JAR) |
|---|---|---|
| 접근 제어 | 포함된 모든 패키지가 외부에 공개 | 특정 패키지를 은닉(encapsulate) 외부 접근을 막을 수 있음. |
| 의존성 | 어떤 라이브러리에 의존하는지 파악하기 어려움. | 모듈 기술자에 필요한 의존 모듈을 명시, 관계 파악이 쉬움. |
모듈의 핵심 기능: 모듈 기술자(module-info.java)
- 모듈의 모든 설정은 프로젝트 최상단에 위치하는
module-info.java파일에 기술합니다.
패키지 공개 및 은닉 exports
exports키워드 사용 >> 외부에 공개할 패키지를 명시적으로 지정 >> 다른 곳에서 사용 가능합니다.exports되지 않은 패키지는 자동 은닉됩니다.
- 은닉 이유
- 사용 방법 통일: 의도한 특정 패키지로만 외부에서 접근하도록 강제, 모듈의 사용법 통일합니다.
- 쉬운 유지보수: 내부용 패키지를 자유롭게 수정하거나 개선해도, 공개된 패키지만 유지된다면 모듈을 사용하는 다른 프로젝트 영향 없습니다.
의존성 설정 requires
requires- 내 모듈이 다른 모듈의 기능을 사용하기 위해, 어떤 모듈에 의존하는지 명시합니다.
requires transitive(전이 의존)- 내 모듈(A)이 의존하는 다른 모듈(B)을, 내 모듈(A)을 사용하는 쪽(C)에서도 추가 설정 없이 바로 사용 가능합니다.
- 집합 모듈: 여러 모듈을 하나로 묶어 제공할 때, 다른 모듈들의 의존성 설정만으로 구성합니다.
리플렉션 허용 opens
- 리플렉션: 코드의 타입(클래스, 인터페이스)을 들여다보고 구조를 분석하는 기술입니다.
open module ...- 모듈 전체의 리플렉션 허용합니다.
opens package;- 특정 패키지만 리플렉션을 허용합니다.
opens package to module;- 특정 외부 모듈에게만 리플렉션을 허용합니다.
자바 표준 모듈
- 모듈화 목적
- 필요한 모듈만으로 구성된 가볍고 작은 사이즈의 자바 실행 환경(JRE) 생성합니다.
- 주요 표준 모듈
java.base- 모든 모듈이 의존하는 가장 기본적인 모듈,
requires하지 않아도 자동으로 사용 가능합니다.
- 모든 모듈이 의존하는 가장 기본적인 모듈,
java.se- JDK가 제공하는 모든 표준 모듈을 포함하는 집합 모듈입니다.
핵심 포인트
- 라이브러리(JAR)
- 단순히 클래스를 모아놓은 도구 상자입니다.
- 모듈
- 패키지를 숨길 수 있고(
exports), 의존 관계를 명시할 수 있는(requires) 시스템화된 도구 상자입니다.
- 패키지를 숨길 수 있고(
exports(공개 설정)- 모듈의 패키지는 기본적으로 은닉,
exports로 지정한 것만 외부에서 사용 가능합니다.
- 모듈의 패키지는 기본적으로 은닉,
감사합니다.
'Language > JAVA' 카테고리의 다른 글
| [이것이 자바다].ch11.java.base 모듈 (0) | 2025.12.29 |
|---|---|
| [이것이 자바다].ch10.예외처리 (0) | 2025.12.28 |
| [이것이 자바다].ch8.중첩선언과 익명객체 (0) | 2025.12.27 |
| [이것이 자바다].ch7.인터페이스 (0) | 2025.12.27 |
| [이것이 자바다].ch6.상속 (1) | 2025.12.26 |