지식보부상님의 공부 일지

Java [10] 라이브러리와 모듈 본문

KB IT's Your Life/Java

Java [10] 라이브러리와 모듈

지식보부상님 2025. 4. 24. 10:15

[1] 라이브러리 

◈ 라이브러리 (library)

- 프로그램 개발시 활용 가능한 클래스, 인터페이스 모아둔 것

- 보통 JAR(Java ARchive) 압축파일 *.jar 형태로 존재

- JAR 파일에는 클래스, 인터페이스의 바이트코드 파일(*.class)가 압축되어 있음

- JAR파일을 ClassPath에 추가하여 사용


[2] 모듈

◈ 모듈 (module)

- 패키지 관리 기능까지 포함된 라이브러리 (Java9부터 지원)

- 일부 패키지 은닉 => 접근 불가하도록 함

- 의존 모듈을 모듈 기술자(module-info.java)에 기술 가능 => 모듈간 의존 관계 쉽게 파악 가능

- 기능별로 모듈화하여 재사용성, 유지보수 유리


[3] 응용프로그램 모듈화 

◈ 모듈화(modulization)

- 응용 프로그램을 기능별로 서브 프로젝트(모듈)로 쪼갠 후 조합하여 개발함

- 응용 프로그램 규모 클수록 협업, 유지보수 유리

- 다른 응용프로그램에서의 재사용 가능


[4] 모듈 배포용 JAR  파일 

◈ 모듈 배포용 JAR 파일

- 다른 모듈에서 쉽게 사용할 수 있게 바이트코드 파일(.class)로 구성된 배포용 JAR 파일 모듈별로 따로 생성 가능


[5] 패키지 은닉

◈ 패키지 은닉

- 모듈은 모듈기술자(module-info.java)에서 exports 키워드 사용해 내부 패키지 중 외부에서 사용할 패키지 지정

- exports 되지 않은 패키지는 자동으로 은닉

- 한가지 패키지로 모듈 사용 방법 통일

- 다른 패키지 수정해도 모듈 사용 방법 바뀌지 않아 외부에 영향 주지 x


[6] 전이 의존 

◈ 의존 설정 전이하기

- 위처럼 my_application_2 프로젝트가 my_module_a, my_module_b 를 requires 하고 있는 의존 관계를 가졌을 때

- 위처럼  my_application_2 프로젝트가 my_module_a에 의존,  my_module_a는 my_module_b에 의존하는 관계로 변경하면 컴파일 오류가 발생함 => 의존 설정 전이가 필요

- transitive 키워드 이용하면 위처럼 의존 설정 전이 가능 

module my_module_a {
    exports pack1;
    requires transitive my_module_b;
}

[7] 집합 모듈 

◈ 집합 모듈

- 여러 모듈을 모아놓은 모듈

- 자주 사용되는 모듈은 일일이 requires 하지 않고 집합 모듈 하나 requires 하여 편리함

- 자체적인 패키지 가지지 않음

- 모듈 기술자에 전이 의존 설정만 함


[8] 리플렉션 허용 

◈ 리플렉션 (reflection)

- 실행 도중에 타입(클래스, 인터페이스 등) 검사하고 구성 멤버 조사하는 것

- 은닉된 패키지는 기본적으로 다른 모듈에 의해 리플렉션 허용하지 않음

- 모듈은 모듈 기술자 통해

  - 모듈 전체를 리플렉션 허용

open module 모듈명 { ... }

 

  - 패키지에 대해 리플렉션 허용

module 모듈명 {
    ...
    opens 패키지1;
    opens 패키지2;
}

 

  - 특정 외부 모듈에서만 리플렉션 허용

module 모둘명 {
    ...
    opens 패키지1 to 외부모듈명, 외부모듈명, ...;
    opens 패키지2 to 외부모듈명;
}

 

할 수 있음


[9] 자바 표준 라이브러리 

◈ 표준 라이브러리

- JDK 가 제공하는 표준 라이브러리는 Java 9부터 모듈화 됨

- java.base : 모든 모듈이 의존하는 기본 모듈로 java.lang, java.util, java.io 등 핵심 패키지 있음

- java.se: JDK 가제공하는 모든 모듈은 제공하는 집합 모듈

 

'KB IT's Your Life > Java' 카테고리의 다른 글

Java [11] 예외 처리  (1) 2025.04.30
Java 정리본 링크 정리  (2) 2025.04.24
Java [09] 중첩 선언과 익명 객체  (0) 2025.04.24
Java [08] 인터페이스  (0) 2025.04.23
Java [07] 상속  (1) 2025.04.22