Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 99클럽
- 문자열
- BOJ
- 너비우선탐색
- 프로그래머스
- programmers
- ssafy
- 다이나믹프로그래밍
- 싸피
- 백트래킹
- 구현
- 개발자스터디
- DP
- java
- 알고리즘
- 삼성청년SW아카데미
- 코딩테스트
- BFS
- 백준
- SSAFY수료식
- 깊이우선탐색
- 위상정렬
- 99일지
- python
- 자바
- 파이썬
- 브루트포스
- dfs
- til
- 항해
Archives
- Today
- Total
EunJng
[Java] 이것이 자바다 Ch.10 본문
'이것이 자바다' 교재 및 강의를 참고하여 정리한 내용입니다.
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 |