[Java] 7주차 과제: 패키지
by Roel Downey
스터디 링크 : 링크
package
패키지는 클래스(인터페이스 포함)의 묶음이다. 서로 관련된 클래스들끼리 그룹 단위로 묶어 놓아 클래스를 효율적으로 관리할 수 있다. (패키지는 물리적인 디렉토리임)
서로 다른 패키지에 있다면 같은 이름의 클래스를 사용하는 것이 가능하다.
패키지명은 대소문자를 모두 허용 하지만 클래스명과 쉽게 구분하기 위해서 소문자로 하는 것을 원칙 으로 하고 있다.
- 하나의 소스파일에는 첫 번째 문장으로 단 한 번의 패키지 선언만을 허용한다.
- 모든 클래스는 반드시 하나의 패키지에 속해야 한다. (java 기본제공 - unnamed package)
- 패키지는 점(.)을 구분자로 계층구조로 구성할 수 있다.
- 패키지는 물리적으로 클래스 파일을 포함하는 하나의 디렉토리이다.
패키지 이름 명명 규칙
- 패키지 이름은 모두 소문자여야한다.
- 자바의 예약어를 사용하면 안된다. (예, int, static)
- 개발 패키지 표준은 정하는 것에 따라 지정하면 된다.
import 키워드
import 패키지명.클래스명
어떤 클래스에서 다른 클래스를 가져와 사용하고 싶을 때 사용하는 키워드이다.
같은 패키지내의 private으로 선언된 클래스를 제외한 모든 클래스, 다른 패키지의 public으로 선언된 클래스를 import 키워드를 통해 가져와 사용할 수 있다.
단순 한개의 클래스를 가져오고 싶다면 import 패키지명.클래스명;형식으로 가져올 수 있고, 만약 해당 패키지의 접근 가능한 모든 클래스를 가져오고 싶다면, 클래스명에 와일드카드 문자(*)를사용해 import 패키지명.*; 형식으로 가져올 수 있다.
import문은 package문 다음에 클래스 선언문 이전에 위치해야 하고 여러 번 선언할 수 있다.
static import
static import는 JDK 1.5부터 지원하기 시작하였다.
예를 들어, AssertJ의 assertThat 메소드의 경우 Assertions 클래스의 static 메소드이기 때문에 Assertions.assertThat()형식으로 사용한다.
기본 import문을 사용하면 패키지명 없이 클래스명.메소드명 으로 사용할 수 있지만
static import문을 사용하면 패키지명, 클래스명 없이 메소드명만으로도 사용이 가능하다.
import static을 사용할 때 동일한 이름의 메소드를 클래스 내부에 생성되어 있다면, 클래스 자신의 메소드가 우선순위를 가진다.
클래스패스
java 소스 파일(.java)을 자바 컴파일러가 컴파일에 성공하면 JVM이 읽을 수 있는 java 바이트 코드(.class)로 변환된다.
JVM이 runtime 시에 Java 바이트 코드를 클래스 로더에 로딩하기 위해선 해당 파일이 있는 위치를 찾아야하는데 여기서 해당 파일의 위치를 찾는 기준이 되는 경로를 클래스패스라 한다.
클래스패스를 지정해주는 첫번째 방법은 CLASSPATH 환경변수를 사용하는 것이다.
JVM의 클래스로더(System Class Loader)는 런타임 시에 $CLASSPATH 환경변수를 호출해 해당 디렉토리에 정의된 클래스들을 로딩한다.
출처 : https://www.ibm.com/developerworks/library/j-dclp1/index.html
클래스패스를 지정해주는 두번째 방법은 -classpath 옵션을 사용하는 것이다.
-classpath 옵션은 자바 컴파일러가 컴파일 하기 위해서 필요로 하는 참조할 클래스 파일들을 찾기 위해 컴파일 시에 파일 경로를 지정해주는 옵션이다.
즉, 다른 클래스에 의존하는 클래스의 소스 파일을 컴파일 하기 위해서 다른 클래스가 위치하는 경로를 나타내주는 것이다.
접근 지시자
클래스, 메소드, 인스턴스 및 클래스 변수를 선언할 때, 사용된다. 자바에서 사용하는 접근지시자는 public, protected, package-private(접근 제어자 없음), private로 총 네가지 이다.
public : 같은 프로젝트면 어디서든 접근 가능하다.
protected : 상속 받는 경우 접근 가능
default : 같은 패키지 내에서 접근 가능
private : 해당 클래스 내에서만 접근 가능하다.
같은 클래스 멤버 | 같은 패키지 멤버 | 자식 클래스 멤버 | 그외의 영역 | |
public | O | O | O | O |
protected | O | O | O | X |
default | O | O | X | X |
private | O | X | X | X |
접근제어자를 사용하면 클래스 외부에서의 직접적인 접근을 허용하지 않는 멤버를 설정하여 정보은닉을 구체화 할 수 있다.
'Java' 카테고리의 다른 글
[Java] 9주차 과제: 예외 처리 (0) | 2021.01.18 |
---|---|
[Java] 8주차 과제: 인터페이스 (0) | 2021.01.05 |
[Java] 6주차 과제: 상속 (0) | 2020.12.22 |
[Java] Binary Tree (0) | 2020.12.16 |
[Java] 5주차 과제: 클래스 (0) | 2020.12.14 |
블로그의 정보
What doing?
Roel Downey