[백기선님_자바_스터디] 7주차 - 패키지

시나브로·2021년 7월 24일
0
post-thumbnail

1. 패키지



  • 클래스를 구분짓는 폴더 개념

  • 패키지는 클래스를 유일하게 만들어주는 "식별자" 역할을 한다.

  • 자바는 패키지의 가장 상위 디렉토리(root) 에서 실행해야한다는 약속이 있기 때문에 해당 패키지로 가서 컴파일 하지 않는다.

  • 패키지 이름과 위치한 폴더의 이름이 같아야한다.

  • 패키지이름을 java 로 시작하면 안된다.

  • 이 둘을 합쳐야 완전하게 한 클래스를 표현한다고 할 수 있으며 FQCN(Fully Qualified Class Name) 이라고 한다.


1.2 빌트-인 패키지(Built-in Package)


자바는 개발자들이 사용할 수 있도록 여러 많은 패키지 및 클래스를 제공한다.

즉, 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 명령어에 모두 사용할 수 있다.

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 파일과 동일한 규칙이 적용되며, 즉 지정할 필요가 없다.








참조


profile
Be More!

0개의 댓글