[whiteship_java_study]7주차. 패키지
목표
자바의 패키지에 대해 학습하세요.
학습 내용
package 키워드
import 키워드
클래스패스
CLASSPATH 환경변수
-classpath 옵션
접근지시자
package 키워드
패키지(Package)
비슷한 성격의 자바 클래스들을 모아 넣는 자바의 디렉토리이다.
우리가 사용하는 디렉토리의 구조, 트리구조이다.
서브패키지(Subpackage)
패키지의 하위 패키지이다. 여러갈래의 서브패키지가 생길 수 있다.
패키지의 특징
클래스의 분류가 용이하다.
패키지가 다르면 동일한 클래스명을 사용할 수 있다.
접근지시자에 따라 클래스간 이동을 제한할 수 있다.
//week.seven package
//seven은 week 의 subpackage
package week.seven;
public class Package {
//다른 패키지라면, 동일 클래스명 사용 가능
public week.Package getOtherPackageClass() {
return new week.Package();
}
}
//다른 패키지
package week;
public class Package {
public String str1 = "Hello, Java!";
private String str2 = "Hello, private!";
protected String str3 = "Hello, protected!" ;
}
이름없는 패키지(unnamed package)
모든 클래스는 하나 이상의 패키지에 포함되어야 한다.
하지만 자바 컴파일러는 소스파일에 패키지 선언이 없다면, 기본적으로 이름 없는 패키지에 포함하여 컴파일한다.
결과적으로 패키지가 없는 클래스는 없다.
import 키워드
클래스 이름의 중복을 피하기 위해서 패키지를 사용하였다면, 이러한 다른 패키지의 클래스를 로드하기위해서는 import 키워드를 사용한다.
import 패키지명.클래스이름;
import 패키지명.*; //패키지내 하위 클래스 모두 선언
CLASSPATH
클래스를 찾기 위한 경로
JVM이 프로그램을 실행할 때, 클래스 파일을 찾는데 기준이 되는 파일 경로를 말한다.
-classpath 옵션
사용할 클래스의 경로를 지정하는 옵션이다.
JVM으로 .java 파일을 컴퓨터에서 실행할 수 있는 .class 파일로 컴파일 후에 이 클래스 파일(.class)을 실행하게 된다.
이 파일의 위치를 찾고 실행하는데 사용한다.
접근지시자
제어자(modifier)
제어자는 클래스와 클래스 멤버 선언 시 사용하여 부가적인 의미를 부여하는 키워드를 의미한다.
자바에서 제어자는 접근 제어자와 기타 제어자로 구분할 수 있다.
기타 제어자의 경우에는 여러개를 함께 사용할 수 있지만 접근제어자는 하나만 사용할 수 있다.
접근제어자
접근 지시자, 접근 제어 지시자, 접근 제어자라고 부른다.
객체 지향에서 정보은닉(data hiding)이란 사용자가 굳이 알 필요가 없는 정보는 사용자에게 숨겨야 한다는 개념이다.
그렇게 함스로써 사용자는 언제나 최소한의 정보만으로 프로그램을 손쉽게 사용할 수 있게 된다.
정보은닉을 위해 접근제어자를 제공하고 있다. 이를 통해 정보은닉을 구체화 할 수 있다.
- private
외부에 공개되지 않으며, 외부에서 직접 접근할 수 없다. - public
public 접근 제어자를 사용하여 선언된 클래스 멤버는 외부로 공개되며, 해당 객체를 사용하는 프로그램 어디에서나 직접 접근할 수 있다. - default
자바에서는 클래스 및 클래스 멤버의 접근 제어의 기본값으로 default 접근 제어를 별도로 명시하고 있다.
이러한 default를 위한 접근 제어자는 따로 존재하지 않으며, 접근 제어자가 지정되지 않으면 자동적으로 default 접근 제어를 가지게 된다.
default 접근 제어를 가지는 멤버는 같은 클래스의 멤버와 같은 패키지에 속하는 멤버에서만 접근할 수 있다. - protected
자바 클래스는 private 멤버로 정보를 은닉하고, public 멤버로 사용자나 프로그램과의 인터페이스를 구축한다.
여기에 부모 클래스(parent class)와 관련된 접근 제어자가 하나 더 존재한다.
protected 멤버는 부모 클래스에 대해서는 public 멤버처럼 취급되며, 외부에서는 private 멤버처럼 취급한다.
클래스의 protected 멤버에 접근할 수 있는 영역은 다음과 같다.- 이 멤버를 선언한 클래스의 멤버
- 이 멤버를 선언한 클래스가 속한 패키지의 멤버
- 이 멤버를 선언한 클래스를 상속받은 자식 클래스(child class)의 멤버
접근 제어자의 접근 범위
자바에서 접근 제어자의 접근 범위가 보다 많은 제어자부터 적은 제어자 순으로 나열하면 다음과 같다.
public > protected > default > private
접근 제어자 | 같은 클래스 | 같은 패키지 | 같은 자식 클래스 | 그 외 |
public | O | O | O | O |
protected | O | O | O | X |
default | O | O | X | X |
private | O | X | X | X |