[JAVA] 패키지, 클래스 패스

Coastby·2022년 9월 25일
0

LIKELION Back-End School

목록 보기
13/61

패키지

○ 패키지 이해

패키지

  • 클래스의 묶음 : 비슷한 성격의 자바 클래스들을 모아 놓은 자바의 디렉토리
    • 클래스가 물리적으로 하나의 클래스파일 (.class)인 것과 같이 패키지는 물리적으로 하나의 디렉토리이다.
  • 클래스의 효율적인 관리 : 서로 관련된 클래스 또는 인터페이스를 묶어서 관리한다.
  • 한 패키지 내에 같은 이름의 클래스는 있을 수 없다.
    • 같은 이름의 클래스 일지라도 서로 다른 패키지에 존재하는 것이 가능핟.
    • 자신만의 패키지 체계를 유지함으로써 다른 개발자가 개발한 클래스 라이브러리의 클래스와 이름이 충돌하는 것을 피할 수 있다.

✋ 단순히 클래스 이름으로만 클래스를 구분했지만, 사실 클래스의 실제 이름 (full name)은 패키지명을 포함한 것이다.

String		//java.lang.String

패키지의 종류

  • 내장 패키지 : 자바에서 기본적으로 제공하는 패키지들
  • 사용자 정의 패키지 : 사용자가 정의하는 패키지들

패키지의 사용

  • 하나의 소스 파일에는 첫 번째 문장으로 단 한 번의 패키지 선언만을 허용한다.
  • 모든 클래스는 반드시 하나의 패키지에 속해야 한다.
    • 패키지를 선언하지 않으면 자바에서 기본적으로 제공하는 '이름없는 패키지 (unnamed package)'에 속하게 된다.
  • 패키지는 점 (.)을 구분자로 하여 계층구조로 구성할 수 있다.
  • 패키지는 물리적으로 클래스 파일 (.class)을 포함하는 하나의 디렉토리이다.

패키지의 선언

package com.wxxx.smart;
  • 클래스나 인터페이스의 소스파일 (.java)의 맨 위에 위와 같이 적어준다.
    • 소스파일에서 공백과 주석을 제외한 첫 문장이어야 한다.
    • 하나의 소스파일에 단 한 번만 선언될 수 있다.
  • 패키지명의 규칙
    • 모두 소문자로 구성한다 : 대소문자를 모두 허용하지만, 클래스명과 구분하기 위해 소문자로 하는 것을 원칙으로 하고 있다.
    • 인터넷 도메인 이름의 역순으로 이름을 구성
    • 이름 끝에 클래스를 정의한 주체 또는 팀의 이름 추가

import문

패키지에 없는 클래스를 사용하기 위해서는 1) 클래스 앞에 패키지명을 표시하거나 2) import문을 사용한다.
클래스의 코드를 작성하기 전에 import문으로 사용하고자 하는 클래스 패키지를 명시해주면 클래스 이름에서 패키지명은 생략할 수 있다. import문의 역할은 컴파일러에게 소스파일에 사용될 클래스의 패키지에 대한 정보를 제공하는 것이다. 컴파일 시에 컴파일러는 소스파일에 사용된 클래스들의 패키지를 알아내고, 모든 클래스이름 앞에 패키지명을 붙여준다.
(import문은 프로그램의 성능에 전혀 영향을 미치지 않는다. import문을 많이 사용하면 컴파일 시간이 아주 조금 더 걸릴 뿐이다.)

import 문을 여러번 사용하는 대신 import java.util.*; 처럼 한 번에 import 할 수 있다. 하지만 이는 하위 클래스의 클래스를 포함하지는 않는다.

import java.util.*;
import java.text.*;

//아래와 같이 쓸 수 없음
import java.*;

클래스패스

가상 기계가 클래스를 찾는 3가지 방법

  1. 첫 번째로 가상 기계는 현재 디렉토리부터 찾는다.
  2. 일반적으로는 환경 변수인 CLASSPATH에 설정된 디렉토리에서 찾는다.
# CLASSPATH 변수 설정
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-11.0.16.jdk/Contents/Home
export PATH=${PATH}:$JAVA_HOME/bin
  1. 가상 머신을 실행할 때 옵션 -classpath를 사용할 수 있다. 즉, 가상 머신을 실행할 때, 클래스 경로를 알려주는 것이다.

    소스파일에 패키지를 지정하면 컴파일할 때, 지정된 경로에 클래스 파일을 생성한다. 지정된 패키지와 일치하는 디렉토리가 존재하지 않는다면 자동적으로 생성한다.

    클래스 파일을 실행하기 위해서는 패키지의 루트 디렉토리를 클래스패스에 포함시켜야 한다. 이 디렉토리를 클래스패스에 포함시켜야만 실행 시 JVM이 클래스를 찾을 수 있다.

    1) 2.와 같은 방법으로 추가하기
    (JDK에 기본적으로 설정되어 있는 클래스패스를 이용하면 위와 같이 클래스 패스를 따로 지정하지 않아도 된다.)

    2) 디렉토리에 넣기
    새로 추가하고자 하는 경우, 클래스는 'JDK설치디렉토리\jre\classes' 디렉토리에, jar파일인 경우 'JDK설치디렉토리\jre\lib\ext'디렉토리에 넣기만 하면 된다.
    (jre 디렉토리 아래의 classes 디렉토리는 JDK 설치 시에 자동으로 생성되지 않으므로 사용자가 직접 생성해야 한다.)

    3) 실행 시에 -cp 옵션을 이용해서 일시적으로 클래스 패스 지정

    java -classpath <클래스 경로> <클래스 파일 이름>
    java -cp <클래스 경로> <클래스 파일 이름>
profile
훈이야 화이팅

0개의 댓글