c23 [Java] 패키지, 모듈
본문 바로가기
[Java]

[Java] 패키지, 모듈

by Jarvis2304 2023. 1. 3.

▶ 패키지

- 서로 관련된 클래스와 인터페이스의 컴파일 된 클래스 파일들(,class)을 하나의 디렉터리에 묶어 놓은 것

- 패키지는 디렉터리 혹은 폴더와 같은 개념

- 하나의 응용프로그램은 여러 개의 패키지 작성 가능 (하나의 패키지로 만들고 모든 클래스 파일을 넣어 둘 수도 있음)

- 패키지는 jar파일로 압축할 수 있음  ex)JDK에서 제공하는 표준 패키지는 rt.jar에 압축

 

▷ 패키지의 필요성

3명이 분담하여 자바 응용 프로그램을 개발하는 경우,  동일한 이름의 클래스가 존재할 가능성 있음   →   합칠 때 같은 이름이 중복되어 오류발생 → 패키지 개념을 이용하면 다른 파일로 취급

 

 

 

 

▶모듈 

-여러 패키지와 이미지등의 자원을 모아놓은 컨테이너
-JDK9부터 자바 API의 모든 클래스들(자바 실행 환경)을 패키지 기반에서 모듈들로 완전히 재구성
-응용프로그램 역시 여러 개의 모듈로 분할하여 작성 가능(클래스들은 패키지로 만들고, 다시 패키지를 모듈로 만듦)

-모듈 파일(.jmod로 저장)


목적
-자바 API를 여러 모듈로 분할하여, 응용프로그램의 실행에 적합한 모듈들로만 실행 환경을 구축할 수 있도록함
-메모리 등의 자원이 열악한 작은 소형 기기에 꼭 필요한 모듈로 작성된 작은 크기의 실행 이미지를 만들기 위함

모듈의 현실
Java 9부터 전면적으로 도입, 복잡한 개념, 큰 자바 응용프로그램에는 개발, 유지보수 등에 적합

 

▷ JDK에서 제공되는 모듈, 패키지

자바가 설치된 jmods 디렉터리에 모듈 파일 존재

-jdk 10의 경우 99개 모듈 파일
-모듈 파일은 ZIP 포맷으로 압축된 파일


● 모듈 파일에는 자바 API의 패키지와 클래스들이 들어 있음
● jmod 명령을 이용하여 모듈 파일에 들어 있는 패키지를 풀어 낼 수 있음

 

 

 

 

 

 

 

 

▷ 패키지 사용하기, import문

● 다른 패키지에 작성된 클래스 사용

(1) import를 이용하지 않는 경우

- 소스 내에서 패키지 이름과 클래스 이름의 전체 경로명을 써주어야 함

(2) import를이용하는 경우

- 소스의 시작 부분에 사용하려는 패키지 명시 (소스에는 클래스명만 명시하면 됨) 

 

● improt 패키지. 클래스

- 특정 클래스의 경로만 포함하는 경우

ex) import java.util.Scanner;

 

 

● improt.패키지.*

- 패키지 내의 모든 클래스를 포함 시키는 경우

ex) import java.util.*;   // *는 현재 패키지 내의 클래스만을 의미하며 하위 패키지의 클래스까지 포함하지 않는다 

 

 

 

▶ 패키지 만들기

▷ 패키지 선언

● package 패키지명

- 컴파일한 클래스 파일을 패키지명의 디렉터리에 저장하라는 지시

- 소스파일의 첫 줄에 선언

- Tools 클래스이 경로명은 UI.Tools

- 다른 클래스에서 Tools 클래스를 사용하기 위해서는 import UI.Tools

 

 

 

 

 

 

 

 

▷ 이클립스로 패키지 만들기

● 예제로 사용할 샘플 소스

(1) 프로젝트 작성 (프로젝트 이름:PackageEx)

 

 

 

(2) 패키지 lib 작성

 

 

 

(3) 패키지 app 작성

 

 

 패키지 작성이 완료된 결과

 

 

(4) 클래스 Calculator 만들기

 

 

(5) Calculator 소스 수정

 

 

(6) GoodCalc.java 작성 후 소스 수정

 

 

(7) 예제 응용 프로그램 실행

 

 

● 프로젝트 packageEx 실행결과

 

 

 

 

 

▶ 클래스 경로(위치) 지정

- 클래스 탐색 경로를 지정하는 방법 2가지

 

(1) 클래스 경로의 환경 변수: 시스템 환경변수 CLASSPATH (설정하는 방법 - 링크:[Java] 자바 개발환경 설치 (tistory.com))

(2) java의 옵션 - classpath (실행 시 클래스 파일이 존재하는 패키지 디렉터리 정보를 -classpath 옵션에 지정)

 

 

 

 

 

 

▶ 패키지의 특성

● 디폴트 패키지

- package 선언문이 없이 만들어진  클래스의 패키지

- 디폴트 패키지는 현재 디렉터리

● 패키지의 계층 구조

- 클래스나 인터페이스가 너무 많아지면 관리의 어려움

- 관련된 클래스 파일을 하나의 패키지로 계층화하여 관리 용이

 

● 패지키별 접근 제한

- default로 선언된 클래스나 멤버는 동일 패키지 내의 클래스들이 자유롭게 접근하도록 허용

 

● 동일한 이름의 클래스와 인터페이스의 사용 가능

- 서로 다른 패키지에 이름이 같은 클래스와 인터페이스 존재 가능

 

● 높은 소프트웨어 재사용성

- 오라클에서 제공하는 자바 API는 패키지로 구성되어 있음

- java.lang, java.io 등의 패키지들 덕분에 일일이 코딩하지 않고 입출력 프로그램을 간단히 작성할 수 있음

 

▶모듈 기반의 자바 실행 환경

- JRE(디폴트 자바 실행 환경) :자바 응용프로그램이 실행되는데 필요한 제반 환경으로서

- 응용프로그램이 실행중에 사용하는 자바 모듈(컴파일된 자바API 클래스들) 와 자바 가상 기계 (JVM)  로 이루어짐

비교 관점 Java 8까지 Java 9 이후
자바 API 클래스의컨테이너
•rt.jar의 단일체에 자바 API의 패키지들을 모두 담음
•rt.jar를 버렸음
•자바 API를 많은 수(99개)의 모듈 파일에 나누어 저장
디폴트 실행 환경
•실행되는 컴퓨터에 rt.jar 설치
     (rt.jar의 크기가 큼)
•modules(JRE의 lib 밑에) 비공개 파일(109MB)에 모듈 저장
•응용프로그램 실행 시 modules 파일에서 필요한 모듈 및 클래스 로딩
맞춤형 실행 환경(custom JRE)
•없음
•소형 기기에 rt.jar를 설치할 수 없는 한계
•맞춤형 실행 환경 구축 가능
•jlink 명령을 이용하여 응용프로그램의 실행에 필요한 모듈들로 실행 환경 구축 가능(홈페이지 설명과 예제 있음)
•메모리가 열악한 소형 기기에도 응용프로그램 실행 가능
예) DB 액세스가 필요 없고 오직 기본 자바 API만 필요한 소형 IoT 장치에는 java.base 모듈만 있으면 됨

 

 

 

● 자바 모듈화의 목적

- 자바 컴포넌트들을 필요에 따라 조립하여 사용하기 위함

- 컴퓨터 시스템의 불필요한 부담 감소

(세밀한 모듈화를 통해 필요없는 모듈이 로드되지 않게 함)

(소형 IoT 장치에서 자바 응용프로그램이 실행되고 성능을 유지하게 함)

 

 

 

 

 

▶ 자바 JDK의 패키지 구조

● JDK 패키지

- 자바에서는 관련된 클래스들을 표준 패키지로 묶어 사용자에 제공

- 자바에서 제공하는 패키지는 C언어의 표준 라이브러리와 유사

- JDK의 표준 패키지는 rt.jar에 담겨 있음  - C:\Program Files\Java\jdk1.6.0_16\jre\lib\rt.jar

 

 

 

▷ 자바 패키지 구조

 

 

 

▶ 자바 주요 패키지

● java.lang

- 자바 language 패키지

- 스트링, 수학 함수, 입출력 등 자바 프로그래밍에 필요한 기본적인 클래스와 인터페이스

- 자동으로 improt됨 (import문  필요없음)

● java.util

- 자바 유틸리티 패키지

- 날짜, 시간, 벡터, 해시맵등과 같은 다양한 유틸리티 클래스와 인터페이스 제공

● java.io

- 키보드, 모니터, 프린터, 디스크 등에 입출력을 할 수 있는 클래스와 인터페이스 제공

● java.awt

- 자바 GUI 프로그래밍을 위한 클래스와 인터페이스 제공

● javax.swing

- 자바 GUI 프로그래밍을 위한 스윙 패키지

 

 

 

▷ 자바 API의 상세 정보

● Oracle Technology Network에서 온라인 제공

링크 - http://docs.oracle.com/javase/8/docs/api/

 

 

댓글