패키지 키워드
패키지란?
- 성격에 맞는 클래스와 인터페이스들을 조직화한 네임스페이스
- 쉽게 말해서 우리의 컴퓨터에 있는 파일들을 공통된 특성에 따라 분류해놓은 폴더의 역할이 java에서 패키지이다.
- 한 프로그램에 JAVA 언어로 작성된 파일들이 수백, 수천개가 됐을 때 파일 성격에 알맞게 분류해 놓은 패키지의 역할은 중요하다.
- JAVA는 또한 패키지 묶음으로 자바 프로그래밍에 유용한 많은 class 라이브러리(api)를 제공한다. (예- java.util.String, java.io.File, java.net.Socket... 등)
- 디렉토리 안에 디렉토리를 가질 수 있는 것처럼 패키지도 마찬가지다. 특정 패키지에서 하위 패키지를 가리킬 때 점(.)으로 구분한다.
패키지 선언
패키지 선언은 다음과 같다.
package dev.olivejua.study.week7;
public class ClassA {
...
}
클래스 바로 윗줄의 예와 같이 package '패키지명' 이 된다. 파일에도 파일 경로가 있어야 찾듯이 모든 클래스는 패키지+클래스여야 컴파일러가 구분할 수 있다.
import 키워드
import는 다른 패키지에 있는 클래스, 인터페이스 또는 static 멤버를 사용할 때 참조할 때 사용하는 키워드이다.
import 키워드 없이 해당 클래스를 가리키려면 다음과 같이 사용해야 한다.
public class ClassA {
java.util.List list = new java.util.ArrayList<String>();
}
하지만 매번 이렇게 작성하기에 너무 길어서 일일이 작성하기에 불편하고, 가독성도 떨어진다.
그럴 때 다음과 같이 import 키워드를 이용하면 해당 파일 안에서는 위의 예처럼 패키지명 없이 바로 가리켜 사용할 수 있다.
import java.util.ArrayList;
import java.util.List;
public class ClassA {
List list = new ArrayList<String>();
}
그런데 위의 예를 보다보니 List와 ArrayList 타입이 java.util이라는 같은 패키지에 있는 것이다. 이럴 경우에 다음의 예와 같이 사용할 수 있다.
import java.util.*;
public class ClassA {
List list = new ArrayList<String>();
}
이렇게 여러 클래스를 지정하여 사용할 경우 패지지명.*; 를 선언하면 java.util 안에 있는 모든 클래스, 인터페이스를 import할 수 있다.
클래스패스
클래스패스란?
- 클래스를 찾기 위한 경로
- JVM이 프로그램을 실행했을 때 클래스 파일을 찾는데 기준이 되는 파일 경로
- 자바 컴파일러가 바이트코드(.class)로 변환하고, java runtime이 이 파일을 실행하려면 먼저 이 파일을 찾아야한다. 이때 classpath에 지정된 경로를 사용한다.
클래스패스를 지정하는 방법
1. 환경변수 CLASSPATH를 사용
환경변수 이름을 CLASSPATH로 하여 경로 목록을 나열하면 JVM이 실행시 이 경로를 모두 검색하여 .class 파일을 로드한다.
2. java runtime에 -classpath 플래그를 사용
실행시마다 -classpath 옵션을 지정하여 경로를 직접 명시해주는 방법이다. 이 방법으로하면 실행할 때마다 매번 지정해줘야하는 번거로움이 있다.
접근지시자
객체지향에서 사용자가 굳이 알 필요없는 정보를 보호하기 위한 것이다.
접근허용은 private < default < protected < public 순으로 많은 접근을 허용한다.
private | 해당 클래스에서만 접근 가능 |
default (접근제어자 별도 설정 X) | 해당 패키지 내에서만 접근 가능 |
protected | 동일 패키지 내에서 접근가능, 외부 패키지는 자식 클래스만 접근 가능 |
public | 모든 클래스 접근 가능 |
정리하는데 도움을 준 참고자료들
- docs.oracle.com/javase/tutorial/java/concepts/package.html
- docs.oracle.com/javase/specs/jls/se14/jls14.pdf
- effectivesquid.tistory.com/entry/%EC%9E%90%EB%B0%94-%ED%81%B4%EB%9E%98%EC%8A%A4%ED%8C%A8%EC%8A%A4classpath%EB%9E%80
'Java' 카테고리의 다른 글
equals와 hashcode는 왜쓰는거지? (0) | 2021.05.25 |
---|---|
[WS live-study] 8주차: 인터페이스 (0) | 2021.02.13 |
[WS live-study] 6주차: 상속 (0) | 2021.02.04 |
[WS live-study] 5주차: 클래스 (0) | 2021.02.03 |
[WS live-study] 4주차: 제어문 (0) | 2021.02.02 |