패키지(package)
- 서로 관련된 클래스와 인터페이스의 묶음.
같은 이름의 클래스일지라도 서로 다른 패키지에 존재하는 것이 가능하므로, 자신만의 패키지 체계를 유지함으로써 다른 개발자가 개발한 클래스 라이브러리의 클래스와 이름이 충돌하는 것을 막을 수 있다.
- 클래스의 실제 이름(full name)은 패키지명이 포함된 것이다.
(String클래스의 full name은 java.lang.String) -> 그래서 같은 이름의 클래스일지라도 서로 다른 패키지에 속하면 패키지명으로 구별가능하다.
- 클래스가 물리적으로 클래스파일(*.class)인 것처럼, 패키지는 물리적으로
폴더(디렉토리)이다. 패키지는 서브패키지를 가질 수 있으며, ‘.’으로 구분한다.
System 클래스 역시 java.lang패키지에 속하므로 lang 디렉토리에 포함되어 있다.
String클래스는 rt.jar파일에 압축되어 있다. 이 파일의 압축을 풀면 아래 그림과 같다.
- rt.jar는 Java API의 기본 클래스들을 압축한 파일
(JDK설치경로\jre\lib에 위치)
rt.jar 는 runtime.실행할 때 실행 중. 자바 프로그램이 실행하는데 필요한 클래스들을 묶어놓은 게 rt.jar 다.
java 9부터 rt.jat 없어졌음
패키지의 선언(1)
- 패키지는 소스파일에 첫 번째 문장(주석 제외)으로 단 한번 선언한다.
- 하나의 소스파일에 둘 이상의 클래스가 포함된 경우, 모두 같은 패키지에
속하게 된다.(하나의 소스파일에 단 하나의 public클래스만 허용한다.)
- 모든 클래스는 하나의 패키지에 속해야한다.
- 패키지가 선언되지 않은 클래스는
자동적으로 이름없는(unnamed) 패키지에 속하게 된다.(default package)
-패키지는 점(.)을 구분자로 하여 계층구조로 구성할 수 있다.
-패키지는 물리적으로 클래스 파일(.class)을 포함하는 하나의 디렉토리이다.
c:\jdk1.8\work>java com.codechobo.book.PackageTest
show in -> System Explorer
bin 폴더- 컴파일된 클래스 파일(*.class)이 있는 곳
src 폴더- 소스 파일(*.java) 있는 곳
클래스나 인터페이스의 소스파일(.java)에 다음과 같이 한 줄 적어주면 된다.
package 패키지명;
반드시 소스파일에서 주석과 공백을 제외한 첫 번째 문장이어야하며, 하나의 소스 파일에 단 한번만 선언될 수 있다.
해당 소스파일에 포함된 모든 클래스나 인터페이스는 선언된 패키지에 속하게 된다.
예9)
package com.codechobo.book;
public class PackageTest {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
클래스 파일을 찾을 수 없다고 나온다.
클래스 파일이 있는 위치로 이동해야한다.
패키지 루트(패키지 시작 폴더의 상위폴더)로 이동
cd 입력하고 한 칸 띄고 복사한 경로 붙여넣기
매번 클래스파일이 있는 패키지로 이동하지 않아도 클래스 패스 등록하면 된다.
환경변수를 설정해준다.
클래스패스(classpath)
- 클래스 파일(*.class)의 위치를 알려주는 경로(path)
- 클래스패스(classpath)는 클래스파일(*.class)를 찾는 경로. 구분자는 ‘;’
- 클래스패스에 패키지가 포함된 폴더나 jar파일을(*.jar) 나열한다.
- 클래스패스가 없으면 자동적으로 현재 폴더가 포함되
클래스패스를 지정할 때는 현재 폴더(.)도 함께 추가해주어야 한다.
- 환경변수 classpath 로 관리한다.
- classpaht(환경변수)에 패키지의 루트를 등록해줘야한다.
제어판>시스템 환경변수 편집>새로만들기
com.codechobo.book 패키지의 루트 복사
패키지 루트로 이동하지 않고도 어느곳에서나 이용할 수 있게 되었다.
클래스패스에다 com 폴더가 있는 패키지 루트를 classpath라는 환경변수에 등록해놓았기 때문
cmd에서 환경변수 클래스패스값을 확인하는 명령은 set classpath
원하는 대로 바꾸려면 폴더에다 추가 세미콜론을 구분자로 계속 경로 추가 가능