학습 개요
- 라이브러리는 자주 사용 되는 공통의 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
구문을 사용할 수 있음
모듈
모듈
- 자바 라이브러리의 업그레이드 버전
- 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()
메소드에서 외부 모듈이 제공한 패키지 사용하기
모듈 간의 의존 관계
requires
와exports
requires
키워드는 해당 모듈(A)이 다른 모듈(B)에 의존함을 선언아래는 모듈 A가 모듈 B가 제공(exports)하는 패키지를 사용한다는 의미
1 2 3
module A { requires B; }
모듈 간 의존 관계
requires transitive
- 모듈이 다른 모듈에 의존함을 표현하며, 현 모듈을 사용하는 모든 모듈에 의존성을 전파함. 즉, 자동으로 의존 관계가 추가 됨
MyProject에서 pack_c와 pack_d를 사용할 수 있음
1 2 3
module A { requires transitive B; }
모듈 간 의존 관계의 전이
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 해야 함
학습 정리
- 자주 사용 되는 클래스와 인터페이스를 컴파일 된 형태로 제공한 것을 라이브러리라고 함
- Java의 라이브러리는
.class
파일을 묶어서 만든.jar
파일의 형태임 - 모듈은 라이브러리의 업그레이드 버전으로 패키지 단위에서 접근성을 설정할 수 있음
- 라이브러리를 사용하려면 해당
.jar
파일을 Classpath에 추가하고, 모듈을 사용하려면 Modulepath에 추가함 - 모듈 프로젝트에서 module-info.java 파일에
export 패키지;
또는requires 모듈;
형식으로 모듈 간 의존 관계를 설정할 수 있음 - JDK의 표준 라이브러리는 모두 모듈화 되었으며,
java.base
는 자바 표준 모듈 중 가장 기본 모듈임
연습 문제
.jar
파일 형식으로 배포 된 라이브러리를 사용하고자 할 때, 이러한.jar
파일을 어떤 환경 변수에 추가해야 하는가?a. Classpath
Java의 표준 모듈 중
requires
키워드로 사용 선언을 하지 않아도 사용 가능한 모듈은 무엇인가?a.
java.base
java.sql
모듈에서 제공하는java.sql
패키지가 있으며, 여기에 포함 된 클래스(또는 인터페이스)를 사용하는 모듈 프로젝트가 있을 때, module-info.java 파일에서 아래 밑줄 부분에 들어가야 할 내용은?1 2 3
module com.mymodule.app { // _____________ }
a.
requires java.sql;