[Lecture/Java] 15강 - 라이브러리와 모듈

김찬미·2025년 5월 30일

15강 - 라이브러리와 모듈

  • 라이브러리
  • 모듈
  • Java 표준 모듈

✅ 라이브러리

여러 프로그램에서 공통으로 사용될 수 있는 클래스와 인터페이스의 모음
여러 .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 가능함

모듈 간의 의존 관계

requiresexports

requires 키워드는 해당 모듈(A)가 다른 모듈(B)에 의존함을 선언

위 그림은 모듈 A가 모듈 B가 제공(exports)하는 패키지를 사용하겠다는 의미

requires transitive

모듈이 다른 모듈에 의존함을 표현하며, 또 현재 모듈이 사용하는 모든 모듈에 의존성을 전파함
→ 즉, 자동으로 의존 관계가 추가됨

위 그림에서 MyProjectpack_cpack_d를 사용할 수 있음


Java 표준 모듈

Java 9부터 모듈 개념이 도입됨
→ 자바 표준 라이브러리가 모듈화 됨

java.xxx 모듈을 표준 모듈 또는 플랫폼 모듈이라 함

java.base 모듈

자바 플랫폼에서 가장 기본이 되는 모듈

  • java.base 모듈을 사용하기 위해, requires 키워드 필요❌

  • java.lang, java.math, java.net, java.io, java.nio, java.util 등의 패키지를 포함
    java.langimport 필요❌


표준 모듈의 사용

module-info.java 파일

자바 프로젝트에서 이 파일을 사용하고, java.base 모듈 내에 없는 패키지를 사용해야 한다면 requires 키워드를 사용하여 명시적 사용 선언해야 함

if) 프로그램에서 java.sql 패키지를 import해서 사용하는 경우

  • java.sql 패키지는 java.sql 모듈에서 exports하고 있음
  • 따라서 프로젝트는 java.sql 모듈을 requires 해야 함

profile
백엔드 지망 학부생

0개의 댓글