카테고리 없음

패키지(package)

prize1209 2021. 7. 6. 18:26

패키지(package)

 

- 서로 관련된 클래스와 인터페이스의 묶음.

 

같은 이름의 클래스일지라도 서로 다른 패키지에 존재하는 것이 가능하므로, 자신만의 패키지 체계를 유지함으로써 다른 개발자가 개발한 클래스 라이브러리의 클래스와 이름이 충돌하는 것을 막을 수 있다. 

 

- 클래스의 실제 이름(full name)은 패키지명이 포함된 것이다.

(String클래스의 full namejava.lang.String) -> 그래서 같은 이름의 클래스일지라도 서로 다른 패키지에 속하면 패키지명으로 구별가능하다. 

 

- 클래스가 물리적으로 클래스파일(*.class)인 것처럼, 패키지는 물리적으로

    폴더(디렉토리)이다.  패키지는 서브패키지를 가질 수 있으며, .으로 구분한다.

 

System 클래스 역시 java.lang패키지에 속하므로 lang 디렉토리에 포함되어 있다. 

String클래스는 rt.jar파일에 압축되어 있다. 이 파일의 압축을 풀면 아래 그림과 같다.  

 

  - rt.jarJava 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 

 

원하는 대로 바꾸려면 폴더에다 추가 세미콜론을 구분자로 계속 경로 추가 가능