목표
자바의 패키지에 대해 학습하세요.
학습할 것 (필수)
- package 키워드
- import 키워드
- 클래스패스
- CLASSPATH 환경변수
- classpath 옵션
- 접근지시자
package 키워드
- 클래스들의 묶음.
- 클래스가 물리적으로 하나의 .class 파일이라면 패키지는 하나의 디렉토리.
package 패키지명;
-
선언 방법
- 클래스 최상위에 패키지명을 적어준다.
-
하나의 클래스 한번만 선언 할 수 있다.
-
자바에서 기본적으로 unnamed package를 제공한다.
- package를 선언하지않으면 자동으로 unnamed package가 된다.
- 이렇게 생성된 클래스는 다른 package에 있는 자바 파일에서 import 할수 없다.
- 같은 unnamed package에 있으면 import 가능.
-
클래스 파일을 컴파일시 컴파일된 .class의 경로는 기본으로 지정한 경로에 컴파일러가 패키지의 계층구조에 맞게 디렉토리가 없으면 디렉토리를 생성하고 .class파일을 패키지 설정된 경로에 생성한다.
import 키워드
- 다른 패키지의 클래스를 사용하려면 패키지명이 포함된 클래스 이름을 사용해야 한다.
- 하지만 매번 패키지명을 적어서 쓰기엔 귀찮다.
- 그래서 import 키워드를 사용하여 패키지명을 생략 시킬수 있다.
package 패키지명; import 패키지명.클래스명; 또는 import 패키지명.*; import 패키지명.클래스명 은 직접 그 클래스를 지정하는것이고 import 패키지명.*; 은 그 패키지의 모든 클래스를 포함하는것이다.
static import
- import 키워드를 사용해 클래스의 패키지명을 생략 하듯이
- static import 키워드를 사용해 static 멤버를 호출할때 클래스 이름을 생략할수 있다.
import static org.junit.Assert.assertThat; import static org.junit.Assert.*; assertThat(); assertEquals();
- assertThat()은 import static으로 직접 선언했고
- assertEquals는 import static으로 Assert 패키지 내의 모든 클래스를 선언했으므로 생략하고 사용할수 있다.
클래스패스
- classpath 는 jdk tools 가 클래스를 찾을수 있게 기준이 되는 방법중 하나.
기본 방법 java -cp 경로 그외에 다른 방법들 windows 환경에서 사용방법 echo %CLASSPATH% linux 환경 echo $CLASSPATH
- 이렇게 classpath를 등록 시켜놓으면 classpath에 설정된 경로를 생략할수 있다.
java -jar a.jar
- classpath로 설정된 디렉토리 안에 a.jar파일이 있는 경우 classpath로 등록하면
- 이런식으로 생략할수 있다.
CLASSPATH 환경변수
- window 환경 , linux 환경 환경변수 설정은 클래스패스 항목에서 언급함
CLASSPATH 옵션
- -cp 옵션은 클래스패스 항목에서 언급함.
추가로 -classpath 옵션도 -cp 옵션과 동일하게 작동한다.
접근지시자
-
외부에서 멤버 또는 클래스에 접근할수 있는 권한을 정해주는것
-
private
- 접근 불가
- 같은 클래스에서만 접근할수 있음.
-
default
- 같은 패키지내에서만 접근가능하다.
- default 키워드는 생략 가능하다.
-
protected
- 같은 패키지 내에서만 접근가능하다
- 추가로 다른 패키지의 서브클래스에서 접근가능하다.
-
public
- 어느곳에서나 접근가능하다.
-
private → default → protected → public
-
우로 갈수록 접근범위가 넓어진다.
-
생성자에도 접근지시자로 권한을 줘서 인스턴스 생성을 못하게 막을 수도 있다.
참고
https://docs.oracle.com/javase/specs/jls/se7/html/jls-7.html#jls-7.5
https://docs.oracle.com/javase/tutorial/essential/environment/paths.html
자바의정석
'백선생님 온라인스터디' 카테고리의 다른 글
9주차 - 예외 처리 (0) | 2021.01.19 |
---|---|
8주차 - 인터페이스 (0) | 2021.01.16 |
6주차 상속 (0) | 2021.01.10 |
4주차 - 제어문 (0) | 2021.01.09 |
3주차 연산자 (0) | 2021.01.07 |