학습 개요
- 라이브러리는 자주 사용 되는 공통의 Java 클래스를 묶어
.jar파일 형태로 압축한 것임 - 모듈 개념은 Java 9부터 도입 된 것으로 라이브러리의 발전 된 형태이며 패키지 별로 접근성을 제어할 수 있음
- 개발 환경에서 라이브러리 또는 모듈을 제공하는 방법과 이것을 사용하는 방법을 학습함
학습 목표
- 라이브러리로 사용 될 클래스를 개발하여 배포할 수 있음
.jar형태의 라이브러리를 활용하는 프로그램을 작성할 수 있음- 모듈 프로젝트를 만들고, module-info.java 파일에 모듈을 정의할 수 있음
- 모듈을 개발하여 제공하거나, 제공 된 모듈을 사용하여 프로그래밍 할 수 있음
- Java 표준 모듈을 설명할 수 있음
강의록
라이브러리
라이브러리
- 여러 프로그램에서 공통으로 사용될 수 있는 클래스와 인터페이스의 모음
- 여러
.class파일을 묶어 압축한.jar파일의 형태 - 이때 유사한 클래스와 인터페이스는 묶어서 패키지로 구성됨
- 여러
라이브러리 만들기
- 자바 프로젝트 생성
- 프로젝트 이름은 my_lib
- module-info.java 파일은 만들지 않음
pack_a패키지에Member클래스 작성pack_b패키지에Student클래스 작성my_lib프로젝트에.jar파일을 저장할 dist 폴더 생성
- 프로젝트 이름은 my_lib
- .jar 파일 만들기
- Export… → JAR file
.class파일이 포함됨
- 파일은 my_lib/dist/my_lib.jar
- Export… → JAR file
라이브러리 사용 하기
- 자바 프로젝트 생성
- 프로젝트 이름은 UseMyLibExample
- module-info.java 파일은 만들지 않음
LibraryExample패키지에 Main 클래스와main()메소드 작성
- 프로젝트 이름은 UseMyLibExample
- 라이브러리 추가 하기
- 프로젝트의 팝업 메뉴에서 Build Path → Configure Build Path… → Java Build Path → Libraries 탭 → Classpath 선택 → Add External JARs… 버튼 클릭
- 이전에 만든 my_lib.jar 파일을 선택하고 Apply and Close
- Add External JARs…은 외부에서 받은
.jar를 포함 시킬 때 사용 - Add JARs…은 작업 공간에 있는
.jar를 포함 시킬 때 사용
- Add External JARs…은 외부에서 받은
main()메소드에서 라이브러리의public클래스 사용하기import구문을 사용할 수 있음
![image]()
![image]()
모듈
모듈
- 자바 라이브러리의 업그레이드 버전
- Java 9부터 모듈 시스템을 도입
- 패키지가 클래스의 묶음이라면, 모듈은 패키지의 묶음
- 모듈은 특별한 기능을 담당하는 프로그램으로, 관련 패키지를 묶어 모듈 단위로 캡슐화 했으며, 다른 모듈을 사용할 수 있으며, 일부 패키지를 공개 패키지로 노출
- 패키지 단위의 접근 제한을 설정할 수 있음
- 기본적으로 모듈 내의 패키지는 외부(다른 모듈)에 공개 되지 않음
- 자바 프로젝트에서 module-info.java 파일에 모듈에 대한 정보를 기술
모듈 정의
- module-info.java
- 파일에 모듈의 이름과 모듈 간의 관계를 기술함
- 자바 모듈 프로젝트의 src 폴더에 위치함
- 배포 과정에서는 .jar 파일에서 루트 폴더에 위치함
- module descriptor 파일이라고 함
모듈의 이름, 모듈이
requires하는 다른 모듈(의존성), 모듈이exports하는 패키지(공개 API)를 명시1 2 3
module my_mod_a { requires my_mod_b; }
1 2 3 4
module my_mod_b { exports package_a; exports package_b; }
모듈을 제공하는 프로젝트
- 모듈을 제공하는 자바 프로젝트 생성
- 프로젝트 이름은 my_mod_a
- 프로젝트 생성 시 module-info.java 파일을 생성
- 나중에 만들려면 프로젝트 팝업 메뉴에서 configure 실행
pack_a패키지에Member클래스 작성pack_b패키지에Student클래스 작성- 프로젝트 이름은 my_mod_b
- 프로젝트 생성 시 module-info.java 파일을 생성
pack_c패키지에Triangle클래스 작성pack_d패키지에Circle클래스 작성
모듈을 사용하는 프로젝트
- 모듈을 사용하는 자바 프로젝트 생성
- 프로젝트 이름은 MyProject
- 프로젝트 생성 시 module-info.java 파일을 생성
TestModule패키지에 Main 클래스와 main() 메소드 작성- 프로젝트의 팝업 메뉴에서 Build Path → Configure Build Path… 선택 → Projects 탭 → Modulepath 선택 → Add… 버튼 클릭
- 모듈을 사용하려면 Classpath가 아닌 Modulepath에 추가해야 함
- 사용할 모듈 프로젝트로 my_mod_a와 my_mod_b를 선택하고 Apply
모듈을 만들고 정의하기
- 모듈 프로젝트에서 module-info.java 파일을 작성
- 기본적으로 모듈의 이름은 프로젝트 이름과 같음
my_mod_a모듈1 2 3 4
module my_mod_a { exports pack_a; exports pack_b; }
my_mod_b모듈1 2 3 4
module my_mod_b { exports pack_c; exports pack_d; }
MyProject모듈1 2 3 4
module MyProject { requires my_mod_a; requires my_mod_b; }
exports패키지- 프로젝트의 패키지를 다른 모듈에서 사용할 수 있게 외부에 제공함을 의미
- 기본적으로
public클래스도 모듈 외부에 공개되지 않기 때문에 공개하려면 exports 해야 함
requires모듈- 프로젝트에서 해당 모듈이 제공한 패키지를 사용(의존)하겠다는 의미
- 이러한 선언이 있어야 import 가능함
모듈 사용하기
main()메소드에서 외부 모듈이 제공한 패키지 사용하기![image]()
![image]()
모듈 간의 의존 관계
requires와exportsrequires키워드는 해당 모듈(A)이 다른 모듈(B)에 의존함을 선언아래는 모듈 A가 모듈 B가 제공(exports)하는 패키지를 사용한다는 의미
1 2 3
module A { requires B; }
모듈 간 의존 관계
![image]()
requires transitive- 모듈이 다른 모듈에 의존함을 표현하며, 현 모듈을 사용하는 모든 모듈에 의존성을 전파함. 즉, 자동으로 의존 관계가 추가 됨
MyProject에서 pack_c와 pack_d를 사용할 수 있음
1 2 3
module A { requires transitive B; }
모듈 간 의존 관계의 전이
![image]()
Java 표준 모듈
Java 표준 모듈
- Java 9부터 모듈 개념이 도입됨
- 자바 표준 라이브러리가 모듈화 됨
java.xxx모듈을 표준 모듈 또는 플랫폼 모듈이라 함
java.base모듈- 자바 플랫폼에서 가장 기본이 되는 모듈
- 어떤 모듈에도 not dependent, 다른 모듈은
java.base에 dependent
- 어떤 모듈에도 not dependent, 다른 모듈은
java.base모듈을 사용하기 위해, requires 키워드로 사용 선언을 하지 않아도 됨java.lang, java.math, java.net,java.io,java.nio,java.util등의 패키지를 포함java.lang은 import 하지 않아도 됨
- 자바 플랫폼에서 가장 기본이 되는 모듈
표준 모듈의 사용
- module-info.java 파일
- 자바 프로젝트에서 이 파일을 사용하고,
java.base모듈 내에 없는 패키지를 사용해야 한다면,requires키워드를 사용하여 명시적 선언을 해야 함
- 자바 프로젝트에서 이 파일을 사용하고,
- 프로그래밍에서
java.sql패키지를 import하여 사용하는 경우java.sql패키지는java.sql모듈에서 exports 하고 있음- 따라서 프로젝트에서
java.sql모듈을 requires 해야 함
![image]()
학습 정리
- 자주 사용 되는 클래스와 인터페이스를 컴파일 된 형태로 제공한 것을 라이브러리라고 함
- Java의 라이브러리는
.class파일을 묶어서 만든.jar파일의 형태임 - 모듈은 라이브러리의 업그레이드 버전으로 패키지 단위에서 접근성을 설정할 수 있음
- 라이브러리를 사용하려면 해당
.jar파일을 Classpath에 추가하고, 모듈을 사용하려면 Modulepath에 추가함 - 모듈 프로젝트에서 module-info.java 파일에
export 패키지;또는requires 모듈;형식으로 모듈 간 의존 관계를 설정할 수 있음 - JDK의 표준 라이브러리는 모두 모듈화 되었으며,
java.base는 자바 표준 모듈 중 가장 기본 모듈임
연습 문제
.jar파일 형식으로 배포 된 라이브러리를 사용하고자 할 때, 이러한.jar파일을 어떤 환경 변수에 추가해야 하는가?a. Classpath
Java의 표준 모듈 중
requires키워드로 사용 선언을 하지 않아도 사용 가능한 모듈은 무엇인가?a.
java.basejava.sql모듈에서 제공하는java.sql패키지가 있으며, 여기에 포함 된 클래스(또는 인터페이스)를 사용하는 모듈 프로젝트가 있을 때, module-info.java 파일에서 아래 밑줄 부분에 들어가야 할 내용은?1 2 3
module com.mymodule.app { // _____________ }
a.
requires java.sql;






