티스토리 뷰
패키지 의미
관련이 있는 클래스와 인터페이스의 묶음
- 클래스와 인터페이스는 패키지의 멤버로 존재
전체적으로 계층 구조의 클래스 라이브러리
- 패키지(폴더와 유사) 단위로 계층적으로 분류됨
패키지 용도
- 쉽게 찾아 사용하기 위해
- 이름 충돌을 피하기 위해
- 접근 제어를 위해
시스템 패키지
Java가 제공하는 클래스 라이브러리
- JDK와 함께 설치됨
일반적으로 jar파일로 압축되어 있음
- 예:C:\ProgramFiles\Java\jdk1.8.0_121\jre\lib\rt.jar
- 예를 들어 java\lang\Boolean.class가 존재함
시스템 패키지의 사용
가장 기본이 되는 최상위 시스템 패키지는 java임
- 대부분의 시스템 패키지는 java.으로 시작됨
Java프로그램에서 상위와 하위 패키지의 구분을 위해 도트(.)를 사용
- 예:java.lang,java.io,java.awt,java.util 등
- Java언어의 기본 클래스는 java.lang에 존재
- 프로그램에서 클래스를 사용할 때는 java.io.IOException과 같이 사용함
사용자 정의 패키지
패키지 정의 문법
- package 구문은 소스 코드 맨 앞에 위치해야 함
1 2 | package 패키지 이름 ; 1개 이상의 클래스나 인터페이스 정의 |
- package 구문은 소스 코드 맨 앞에 위치해야 함
- 패키지 이름은 관례상 소문자로 작명
* 하위 패키지는 . 으로 구분하여 작성
- 컴파일하면 패키지가 만들어지고(또는 기존 패키지에) 클래스 파일( .class )이 패키지에 저장됨
패키지 만들기 예
1 2 3 4 5 6 | package com.vehicle; publicclassCar { StringszType = "승용차"; } | cs |
- 컴파일 결과로 Car.class가 만들어짐
- Car.class는 com.vehicle 패키지에 저장됨
- com.vehicle은 어디에?
* 컴파일 할 때 –d옵션 사용하여 지정함
* 예 - javac Car.javad D:\javaClasses * 이 경우 D:\javaClasses\com\vehicle\Car.class
사용자 정의 패키지
Eclipse를 사용한 패키지 정의
- 메뉴 [File/New/Package]를 선택
* 패키지에 해당하는 폴더가 만들어짐
* 생성된 패키지에서 클래스를 만들면 됨
- 메뉴 [File/New/Class]를 선택하여 클래스 이름과 함께 패키지 이름을 입력함
패키지의 사용
같은 패키지에 있거나 public인 외부의 클래스를 사용하려면 패키지를 포함한 완전한 클래스 이름을 사용해야 함
1 | graphics.Rectangle myRect = new graphics.Rectangle(); | cs |
import문
1 | import 패키지 이름.클래스 이름; | cs |
1 | import 패키지 이름.*; | cs |
import구문은 소스 코드 맨 앞에 위치함
- package구문이 있다면 그 다음에 위치
프로그램에서 패키지 이름을 생략하고 클래스나 인터페이스를 사용할 수 있게 함
Java 프로그램에서 import java.lang.*;구문은 자동 포함됨
패키지의 사용과 접근 제어
아래 프로그램에서 package구문이 없다면 패키지 접근 수준의 Car클래스를 사용할 수 없음
1 2 3 4 5 6 7 8 9 10 11 12 | // package com.vehicle; import com.vehicle.*; class MyBus extends Bus { } public class PackageTest { public static void main(String args[]) { Bus bus = newBus(); Car car = newCar(); //오류 } } | cs |
클래스 찾기
컴파일하거나 실행 할 때, 필요한 클래스를 찾아야 함
- 컴파일러가 A.class가 위치한 경로 또는 A.class를 포함하고 있는 jar파일의 존재를 알아야 함
JVM은 다음에서 클래스를 찾음
- Java 기본 패키지
* [Java설치폴더]\lib\*.jre
- Java 확장 패키지
* [Java설치폴더]\lib\ext\*.jre
- 사용자 클래스도 찾을 수 있음
* 이때 방법이 필요함
- 사용자 클래스는 환경 변수 CLASSPATH에 지정된 경로 또는 jar파일에 서 찾음
환경변수 CLASSPATH
- 컴파일러는 CLASSPATH에 지정된 경로에서 클래스를 찾음
- CLASSPATH의 경로는 jar파일을 포함할 수 있음
- 예
* 프로그램에서 graphics.Circle 클래스를 사용하고 CLASSPATH=path1;path2;a.jar라고 가정
* 이때,path1\graphics\Circle.class 또는 path2\graphics\Circle.class 또는 a.jar에 \graphics\Circle.class가 있어야 함