보리차
chapter 08 패키지와 클래스 패스 본문
클래스 패스
자바 가상머신이 클래스 파일을 찾는 경로
현재 디렉토리를 기준으로 한 실행
현재 디렉토리: 명령 프롬프트 상에서 작업이 진행 중인 디렉토리의 위치
클래스 패스를 지정하지 않으면 자바 가상머신은 필요한 클래스를 현재 디렉토리에서 찾는다.
따라서 다른 디렉토리에 있는 클래스를 참조하기 위해서는 클래스 패스를 지정하여 자바 가상머신의 클래스 탐색 경로를 추가해야 한다.
클래스 패스의 지정
클래스 패스는 자바 가상머신의 클래스 탐색 경로를 의미하며, 이는 프로그래머가 직접 지정할 수 있다.
C:/PackageStudy>set classpath 클래스 패스의 확인
C:/PackageStudy>set classpath=.;C:\PackageStudy\MyClass 클래스 패스에 추가할 경로(여러 개인 경우 ;로 구분)
절대 경로와 상대 경로
상대 경로: 현재 디렉토리를 기준으로 표현된 파일이나 디렉토리의 위치
현재 디렉토리가 바뀌면 상대 경로가 지정하는 모든 경로가 그에 맞게 수정된다.
실제 개발을 할 때에는 상대 경로를 주로 사용한다.
패키지의 이해
패키지는 클래스를 묶는 수단. 묶어서 다른 클래스 또는 다른 클래스들의 묶음과 구분하기 위한 수단이다.
패키지 선언의 의미와 목적
클래스 접근 방법의 구분
- 서로 다른 패키지의 두 클래스는 인스턴스 생성 시 사용하는 이름이 다르다.
클래스의 공간적인 구분
- 서로 다른 패키지의 두 클래스 파일은 저장되는 위치가 다르다.
패키지 이름을 짓는 관례
- 클래스의 이름과 구분이 되도록 패키지의 이름은 모두 소문자로 구성
- 인터넷 도메인 이름의 역순으로 패키지 이름을 구성
- 패키지 이름의 끝에 클래스를 정의한 주체 또는 팀을 구분하는 이름 추가
패키지의 선언 및 컴파일 방법
package com.wxfx.smart; // 패키지 선언
public class Circle {
...
}
패키지 선언이 끝나면 컴파일을 해야한다.
C:\PackageStudy>javac -d <directory> <filename>
// 예시
C:\PackageStudy>javac -d . src\circle1\Circle.java
컴파일을 완료하면 현재 디렉토리를 기준으로 패키지 이름과 동일한 디렉토리 경로가 생성되고, 그 안에 클래스 파일이 위치하게 된다.
이제 다음과 같이 인스턴스를 생성하면 된다.
com.wxfx.smart.Circle c1 = new com.wxfx.smart.Circle(3.5)
동일한 이름의 두 클래스 파일이 있더라도 패키지 선언으로 인해 물리적으로 분리될 수 있다.
import 선언
동일한 이름의 두 클래스를 대상으로 인스턴스를 생성해야 하는 상황이라면 패키지의 이름은 생략이 불가능하지만 그렇지 않은 경우는 import를 통해 패키지 이름을 생략할 수 있다.
import com.wxfx.smaart.Circle;
Circle c1 = new Circle(3.5);
클래스가 아닌 패키지를 대상으로 import 할 수 있다.
import com.wxfx.smart.*;
그러나 패키지 대상의 import 선언은 이름 충돌이 발생할 수 있고, 의도하지 않은 클래스의 인스턴스를 생성하는 상황으로 이어질 수 있으므로 가급적 사용을 자제하는 것이 좋다.
'Java' 카테고리의 다른 글
chapter 10 클래스 변수와 클래스 메소드 (0) | 2022.01.26 |
---|---|
chapter 09 정보 은닉 그리고 캡슐화 (0) | 2022.01.25 |
chapter 07 클래스와 인스턴스 (0) | 2022.01.25 |
chapter 06 메소드와 변수의 스코프 (0) | 2022.01.21 |
chapter 05 실행 흐름의 컨트롤 (0) | 2022.01.21 |