티스토리 뷰
목표
자바의 패키지에 대해 학습하기.
스터디 목차
- package 키워드
- import 키워드
- 클래스패스
- CLASSPATH 환경변수
- -classpath 옵션
- 접근지시자
1. package 키워드
패키지 구조
자바에서 package는 물리적으로 하나의 디렉터리를 의미한다.
따라서 하나의 package에 속한 클래스나 인터페이스 파일은 모두 해당 package 이름의 디렉터리에 포함되어 있다.
이러한 package는 다른 package를 포함할 수 있으며, 이때 디렉터리의 계층 구조는 점(.)으로 구분된다.
패키지의 선언방법
package 이름에는 package의 경로까지 포함한 풀 네임을 명시해야한다.
package 패키지이름;
이름없는 패키지(unnamed package)
자바의 모든 클래스는 반드시 하나 이상의 패키지에 포함되어야 한다.
하지만 자바 컴파일러는 소스파일에 어떠한 패키지의 선언도 포함되지 않으면, 기본적으로 이름없는 패키지에 포함해 컴파일 한다.
따라서 패키지를 명시하지 않은 모든 클래스와 인터페이스는 모두 같은 패키지에 포함되게 된다.
2. import 키워드
외부 패키지의 클래스를 불러 사용하고자 할 경우 원래는 클래스명 앞에 패키지를 명시해야 한다.
예를 들어서 Scanner라는 클래스가 java.util 패키지에 속해 있다. 이것을 불러 사용하려면 다음과 같이 해야한다.
public class Main {
static public void main(String[] args) {
java.util.Scanner sc = new java.util.Scanner(System.in);
int N = sc.nextInt();
}
}
하지만 import문을 사용하면 매번 클래스 앞에 패키지 이름을 붙여 사용하지 않고 한번 선언해 줌으로써 편리하게 사용할 수 있다.
import java.util.Scanner;
public class Main {
static public void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
}
}
import문의 선언
해당패키지의 모든 클래스를 가져오고 싶을때는 *을 붙여준다.
import 패키지이름.클래스이름;
import 패키지이름.*;
자바에서 가장 많이 사용하는 java.lang 패키지에 대해서는 import문을 사용하지 않아도 클래스 이름만으로 사용할 수 있도록 해주고 있다.
3. 클래스패스(Class Path)
자바에서 클래스패스란 말 그대로 클래스를 찾기위한 경로이다. 즉, JVM이 프로그램을 실행할 때, 클래스파일을 찾는 데 기준이 되는 파일 경로를 말한다.
소스코드(.java로 끝나는 파일)를 컴파일하면 소스코드가 바이트코드(바이너리 형태의 .class 파일)로 변환된다.
java runtime(java 또는 jre)으로 이 .class 파일에 포함된 명령을 실행하려면, 먼저 이 파일을 찾을수 있어야한다. 이때 .class 파일을 찾을 때 classpath에 지정된 경로를 사용한다.
클래스패스를 지정할 수 있는 두 가지 방법이 있다. 하나는 환경변수 CLASSPATH를 사용하는 방법이고, 또 하나는 java runtime에 -classpath 플래그를 사용하는 방법이다.
4. CLASSPATH 환경변수
시스템 속성 -> 고급 -> 환경변수에 들어간다.
변수명은 JAVA_HOME으로 설정하고, 경로는 JDK의 경로를 지정해준다.
JDK에 저장된 bin폴더를 찾아가야 하기 때문에 path에 %JAVA_HOME%\bin으로 작성해준다.
5. -classpath 옵션
CLASSPATH 환경설정 하는 방법은 편리하지만 PC를 바꾸게 되면 다시 설정을 해줘야 하는 번거로움이 있기 때문에
-classpath도 자주 사용한다.
java -classpath ".;lib" 클래스이름
. 은 현재 디렉토리에서 찾아보라는 뜻이다.
; 은 경로와 경로를 구분하는 구분자이다.
6. 접근지시자
지시자 | 클래스 내부 | 동일 패키지 | 상속받은 클래스 | 이외의 영역 |
private | O | X | X | X |
default | O | O | X | X |
protected | O | O | O | X |
public | O | O | O | O |
private : 클래스 내부(메소드)에서만 접근을 허용한다.
default : 클래스 내부와 동일 패키지에서만 접근을 허용한다. (접근제어 지시자를 선언하지 않은경우를 말함)
protected : 클래스 내부와 동일패키지 상속받은 클래스에서만 접근을 허용한다.
public : 어디서든 접근 가능(접근을 제한하지 않는다.)
Reference
www.tcpschool.com/java/java_usingClass_package
'Live Study' 카테고리의 다른 글
[JAVA 스터디] 9주차 과제 : 예외 처리 (0) | 2021.01.11 |
---|---|
[JAVA 스터디] 8주차 과제 : 인터페이스 (0) | 2021.01.04 |
[JAVA 스터디] 6주차 과제 : 상속 (0) | 2020.12.24 |
[JAVA 스터디] 5주차 과제 : 클래스 (0) | 2020.12.18 |
[JAVA 스터디] 4주차 과제 : 제어문 (0) | 2020.12.05 |