EunJng

[Java] 이것이 자바다 Ch.10 본문

STUDY/JAVA

[Java] 이것이 자바다 Ch.10

Eunjng 2024. 1. 24. 19:00

'이것이 자바다' 교재 및 강의를 참고하여 정리한 내용입니다.

Ch.10 라이브러리와 모듈

라이브러리

  • 프로그램 개발 시 활용할 수 있는 클래스와 인터페이스들을 모아놓은 것
  • 일반적으로 JAR(Java ARchieve) 압축 파일 형태로 존재하고, JAR 파일에는 클래스와 인터페이스의 바이트코드 파일들이 압축되어 있다.
  • 라이브러리를 이용하려면 라이브러리 JAR 파일을 ClassPath에 추가해야 한다.
    • 콘솔에서 프로그램 실행
      • java 명령어를 실행할 때 -classpath로 제공
      • CLASSPATH 환경 변수에 경로 추가
    • 이클립스 프로젝트에서 실행
      • 프로젝트의 Build Path에 추가

모듈

  • 패키지 관리 기능까지 포함된 라이브러리
  • 일반 라이브러리는 내부에 포함된 모든 패키지에 외부 프로그램에서의 접근이 가능하지만, 모듈은 일부 패키지를 은닉하여 접근할 수 없게끔 할 수 있다.
  • 실행할 때 필요로 하는 의존 모듈을 모듈 기술자에 기술할 수 있기 때문에 모듈 간의 의존 관계를 쉽게 파악할 수 있다.
  • 기능별로 모듈화해서 개발하고 조립하는 방식 사용 시 재사용성 및 유지보수에 유리

응용프로그램 모듈화

패키지 은닉

  • 모듈은 모듈 기술자(module-info.java)에서 exports 키워드를 사용해 외부에서 사용할 패키지를 지정한다. exports 되지 않은 패키지는 자동으로 은닉된다.
  • 일부 패키지를 은닉하는 이유
    • 모듈 사용 방법 통일: 외부에서 패키지1로 사용 방법 통일
    • 쉬운 수정: 모듈 성능 향상을 위해 패키지2와 3을 수정하더라도 모듈 사용 방법(패키지1)이 달라지지 않기 때문에 외부에 영향을 주지 않는다.

전이 의존

집합 모듈

  • 여러 모듈을 모아놓은 모듈
  • 집합 모듈은 자체적인 패키지를 가지지 않고, 모듈 기술자에 전이 의존 설정만 한다.
module my_module {
    requires transitive my_module_a;
    requires transitive my_module_b;
}
  • 다른 프로젝트에서 my_module만 requires하면 my_module_a와 my_module_b 모듈 둘 다 사용 가능

리플렉션 허용

  • 리플렉션: 실행 도중에 타입(클래스, 인터페이스 등)을 검사하고 구성 멤버를 조사하는 것
  • 은닉된 패키지는 기본적으로 다른 모듈에 의해 리플렉션을 허용하지 않는다.
  • 모듈은 모듈 기술자를 통해 모듈 전체 또는 지정된 패키지에 대해 리플렉션을 허용할 수 있고, 특정 외부 모듈에서만 리플렉션을 허용할 수도 있다.
    • export된 패키지는 언제든지 리플렉션 가능하므로 opens로 지정할 필요가 없다.
// 모듈 전체를 리플렉션 허용
open module 모듈명 { }

// 지정된 패키지에 대해 리플렉션 허용
module 모듈명 {
    opens 패키지1;
    opens 패키지2;
}

// 지정된 패키지에 대해 특정 외부 모듈에서만 리플렉션 허용
module 모듈명 {
    opens 패키지1 to 외부모듈명, 외부모듈명;
    opens 패키지2 to 외부모듈명;
}

자바 표준 모듈

  • 자바 프로그램이라면 JDK가 제공하는 표준 라이브러리를 반드시 활용해야 한다.

  • java.base: 모든 모듈이 의존하는 기본 모듈. requires하지 않아도 사용 가능
    • java.lang, java.util, java.io 등의 핵심 패키지가 있고, java.lang을 제외하고 import해서 사용 가능
  • java.se: JDK가 제공하는 모든 모듈을 제공하는 집합 모듈
  • 표준 라이브러리를 모듈화한 이유: 응용프로그램을 실행하는데 필요한 모듈만으로 구성된 작은 사이즈의 자바 실행 환경(JRE)을 만들기 위함.
    • 독립 실행형(응용프로그램 + 표준 라이브러리)으로 배포할 경우 표준 라이브러리의 크기가 작을수록 배포 사이즈가 줄어든다.
    • 제한된 자원만 가지고 있는 소형 기기에는 사이즈가 작은 자바 실행 환경이 필요

 

'STUDY > JAVA' 카테고리의 다른 글

[Java] 이것이 자바다 Ch.12  (0) 2024.02.10
[Java] 이것이 자바다 Ch.11  (0) 2024.01.27
[Java] 이것이 자바다 Ch.09  (0) 2024.01.22
[Java] 이것이 자바다 Ch.08  (0) 2024.01.19
[Java] 이것이 자바다 Ch.07  (0) 2024.01.13