[백기선님_자바_스터디] 7주차 - 패키지
1. 패키지
-
클래스를 구분짓는 폴더 개념
-
패키지는 클래스를 유일하게 만들어주는 "식별자" 역할을 한다.
-
자바는 패키지의 가장 상위 디렉토리(root) 에서 실행해야한다는 약속이 있기 때문에 해당 패키지로 가서 컴파일 하지 않는다.
-
패키지 이름과 위치한 폴더의 이름이 같아야한다.
-
패키지이름을 java 로 시작하면 안된다.
-
이 둘을 합쳐야 완전하게 한 클래스를 표현한다고 할 수 있으며 FQCN(Fully Qualified Class Name) 이라고 한다.
1.2 빌트-인 패키지(Built-in Package)
클래스를 구분짓는 폴더 개념
패키지는 클래스를 유일하게 만들어주는 "식별자" 역할을 한다.
자바는 패키지의 가장 상위 디렉토리(root) 에서 실행해야한다는 약속이 있기 때문에 해당 패키지로 가서 컴파일 하지 않는다.
패키지 이름과 위치한 폴더의 이름이 같아야한다.
패키지이름을 java 로 시작하면 안된다.
이 둘을 합쳐야 완전하게 한 클래스를 표현한다고 할 수 있으며 FQCN(Fully Qualified Class Name) 이라고 한다.
자바는 개발자들이 사용할 수 있도록 여러 많은 패키지 및 클래스를 제공한다.
즉, Java API에 포함되는 다수의 클래스를 포함하는 패키지이다
빌트 인 패키지 종류로는 다음과 같다
- java.lang : language suppoart 클래스들을 포함사는 패키지
- 프리미티브 타입이나 수학 연산의 정의가 되는 클래스들
- 자동으로 import되기 때문에 해당 패키지의 클래스를 바로 사용할 수 있다.
- java.io : 입출력 기능을 지원하는 클래스들을 포함하는 패키지
- java.util : 자료구조 구현을 위한 유틸리티 클래스를 포함하는 패키지
- java.applet : Applets을 생성하기 위한 클래스들을 포함하는 패키지
- java.awt : GUI 컴포넌트를 구현하기 위한 클래스들을 포함하는 패키지
- java.net : 네트워킹 기능을 지원하기 위한 클래스를 포함하는 패키지
2. import 키워드
다른패키지명에 있는 클래스를 찾지 못할때 사용한다.
패키지에 다수의 클래스를 import 하는 경우 import 패키지명.* 처럼 import 할 수 있다.
서로 다른 패키지에 동일한 클래스 이름이 존재하고, 두 패키지가 모두 import 되어 있는 경우에는 어떤 패키지의 클래스를 로딩할지 결정할 수 없기 때문에 컴파일 에러가 발생한다. 따라서 이 경우에는 FQCN로 작성해야한다.
ex)
package com.mycompany;
import com.hankook.*;
import com.kumho.*;
public class Car{
SnowTire snowTire = new SnowTire();
BigWidthTire bigWidthTire = new BigWidthTire();
com.hankook.Tire hankookTire = new com.hankook.Tire();
com.kumho.Tire kumnhoTire = new com.kumho.Tire();
}
3. 클래스 패스
-
클래스를 찾기위한 경로.
-
JVM이 프로그램을 실행할 때, 클래스파일을 찾는 데 사용한다.
-
즉, JVM은 CLASSPATH의 경로를 확인하여 라이브러리 클래스들의위치를 참조하게 된다. 그러나 J2JDK 버전부터는 \jre\lib\ext 폴더에 필요한 클래스 라이브러리들을 복사해 놓으면 사용가능하여 특별한 경우가 아니면 설정을 하지 않는다.
-
classpath 옵션은 java와 javac 명령어에 모두 사용할 수 있다.
클래스를 찾기위한 경로.
JVM이 프로그램을 실행할 때, 클래스파일을 찾는 데 사용한다.
즉, JVM은 CLASSPATH의 경로를 확인하여 라이브러리 클래스들의위치를 참조하게 된다. 그러나 J2JDK 버전부터는 \jre\lib\ext 폴더에 필요한 클래스 라이브러리들을 복사해 놓으면 사용가능하여 특별한 경우가 아니면 설정을 하지 않는다.
classpath 옵션은 java와 javac 명령어에 모두 사용할 수 있다.
3.1 클래스 로더
-
JVM의 클래스로더는 런타임 시에 $CLASSPATH 환경변수를 호출해 해당 디렉토리에 정의된 클래스들을 로딩하게 된다.
-
클래스 로더는 다음과 같이 3종류가 존재한다.
-
BootStrap Class Loader
- 기본 클래스로더 중 최상위 클래스 로더
- jre/lib/rt.jar 에 담긴 JDK 클래스 파일을 로딩해준다.
- String 클래스나, Object 클래스를 사용할 수 있었던 이유가 바로 BootStrap Class Loader가 자동으로 메모리에 적재해주기 떄문이다.
-
Extension Class Loader
- 익스텐션 클래스로더는 jre/lib/ext 폴더나 java.ext.dirs 환경 변수로 지정된 폴더에 있는 클래스 파일을 로딩한다.
-
System Class Loader
- 바로 System Class Loader 가 우리가 만든 Class를 메모리에 올리는 역할을 하는데, 그 때 classpath 기준으로 클래스들을 로드해준다.
3.2 rt.jar
-
JRE와 JDK 사이에는 차이가 있다.
-
JRE는 JDK 중에서 java 프로그램을 실행하는 프로그램만 포함된 환경이다.
-
따라서, JRE는 classes.zip 파일에서 클래스를 찾지 않는다.
-
대신 rt.jar 파일을 사용한다.
-
rt.jar 파일에는 classes.zip과 동일한 클래스가 모두 포함되어 있고, 아카이브 형식과 이름만 다른 것을 사용한다. Java 1.2가 발표되면서 classes.zip 파일은 없어졌다.
-
대신, JDK와 JRE가 모두 "rt.jar" 파일을 사용한다.
-
"rt.jar" 파일을 classpath에 지정해야 하는가에 대해서는 classes.zip 파일과 동일한 규칙이 적용되며, 즉 지정할 필요가 없다.
참조
Author And Source
이 문제에 관하여([백기선님_자바_스터디] 7주차 - 패키지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@cham/백기선님자바스터디-7주차-패키지저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)