▣ 목표
자바의 패키지에 대해 학습하세요.
▣ 학습할 내용
- package 키워드
- import 키워드
- 클래스 패스
- CLASSPATH 환경변수
- -classpath 옵션
- 접근 지시자
▶ 7-1 package 키워드
▷ 패키지란?
클래스의 묶음이다. 패키지 안에 클래스나 인터페이스를 포함시킬 수 있다. 클래스가 물리적으로 하나의 클래스 파일이라고 할 때 패키지는 물리적으로 하나의 디렉토리가 될 수 있다.
- 소스파일에서 (주석과 공백을 제외한) 첫 번째 문장에서 단 한 번의 패키지 선언만을 허용한다.
- 모든 클래스는 반드시 하나의 패키지에 속해야 한다.
- 패키지는 점(.)을 구분자로 하여 계층구조로 구성할 수 있다.
- 패키지는 물리적으로 클래스 파일(.class)을 포함하는 하나의 디렉터리이다.
- 패키지와 클래스 이름을 모두 표현한 것이 완전한 클래스명이라고 할 수 있고, FQCN(Fully Qualified Class Name)이라고도 한다.
▷ 패키지의 선언
패키지는 아주 간단하게 다음과 같이 선언할 수 있다.
package 패키지이름;
패키지 이름은 대소문자를 허용하지만, 클래스 이름과 헷갈리지 않기 위해 소문자 사용을 원칙으로 하고 있다.
▶ 7-2 import 키워드
소스코드 작성 시 다른 패키지의 클래스를 사용할 때 패키지명이 포함된 클래스명을 사용해야 한다. 하지만 매번 풀네임을 작성하기 불편하기 때문에 import를 사용하여 해당 클래스의 패키지부터 클래스까지 작성한다. 작성된 클래스의 전체 경로는 패키지 정보를 제공하기에 컴파일 시 컴파일러가 사용된 클래스의 패키지를 알아내어 자동으로 모든 클래스 앞에 패키지명을 붙여주게 된다.
일반적으로 소스파일 구성은 다음과 같은 순서로 작성된다.(package명 -> import문 -> 클래스 선언)
package test; // first
import static java.lang.System.out; // second
class Test { // third
out.println("hello");
}
위의 예시는 static import문의 예시다. import를 사용하면 클래스의 패키지명을 생략할 수 있고, static import문을 사용하는 경우 static변수나 메서드를 호출할 때 필요한 클래스 이름을 생략할 수 있다. 특정 클래스의 static멤버를 자주 사용하는 경우에 static import를 사용하면 편리하고 코드도 간결해진다.
▶ 7-3 클래스 패스 (Classpath)
JVM이나 자바 컴파일러가 사용하는 파라미터이다. 클래스나 패키지를 찾을 때 기준이 되는 경로이다. 즉, java 명령을 실행하는 위치를 의미한다.
▶ 7-4 CLASSPATH 환경변수
앞에서 설명한 클래스 패스를 환경 변수를 통해 운영체제에 지정할 수 있다. 환경변수를 설정하면 실행할 때마다 -cp(classpath)옵션을 사용하지 않아도 된다. JVM이 시작될 때 JVM의 클래스 로더는 CLASSPATH환경 변수를 호출한다.
▶ 7-5 -classpath 옵션
컴파일러가 컴파일하기 위해 필요한 참조 예정인 클래스 파일들을 찾기 위해 컴파일 시 파일 경로를 지정해주는 옵션
옵션에 -classpath 또는 -cp로 설정할 수 있다.
javac <option> <source files>
java <option> <source files>
▶ 7-6 접근 지시자(Access Modifier)
접근 제어자라고도 불리며 멤버 또는 클래스에 사용되어 해당 멤버 또는 클래스를 외부에서 접근할 수 있는 범위를 제한할 수 있다. default의 경우 실제로 default를 붙이지는 않는다.
▷ 접근 지시자가 사용될 수 있는 곳 -> 클래스, 멤버 변수, 메서드, 생성자
제어자 | 같은 클래스 | 같은 패키지 | 자손 클래스 | 전체 |
public | O | O | O | O |
protected | O | O | O | X |
default | O | O | X | X |
private | O | X | X | X |
▷ 대상에 따라 사용할 수 있는 접근 제어자
대상 | 사용가능한 접근 제어자 |
클래스 | public, (default) |
메서드 | public, protected, (default), private |
멤버변수 | |
지역변수 | X |
접근 지시자를 사용하는 이유는 클래스 내부의 데이터를 보호하기 위해서이다. 중요한 데이터, 값을 변경하지 못하게 막기 위해 외부에서의 접근을 막는 것이 필요하다. 이때 객체지향 개념의 캡슐화에 해당하는 내용이라고 할 수 있다.
예시로 메서드 하나를 수정한다고 했을 때, 접근 제어자가 private이라면 해당 메서드가 속한 클래스만 체크하면 메서드 수정으로 인해 발생하는 오류가 있는지 없는지 확인할 수 있고, default라면 패키지 내부에서만 확인하면 되지만, public이라면 체크해야 할 범위가 너무 넓다. 접근 지시자를 적절히 활용하면 유지, 보수도 효율적으로 할 수 있도록 도움이 될 것이다.
백기선님의 자바 라이브 스터디 커리큘럼을 따라 공부하고 있습니다.
잘못된 점이나 보충할 부분이 있으면 코멘트 남겨주세요
작은 조언이 저에겐 성장의 원동력이 됩니다 :-)
'Java' 카테고리의 다른 글
[자바 스터디] #10 - 멀티쓰레드 프로그래밍 (0) | 2021.02.28 |
---|---|
[자바 스터디] #9 - 예외처리 (0) | 2021.02.18 |
[자바 스터디] #8 - 인터페이스 (1) | 2021.02.16 |
[자바 스터디] #3 - 연산자 (0) | 2021.02.04 |
[자바 스터디] #2 - 데이터 타입, 변수 그리고 배열 (0) | 2021.01.27 |
댓글