본글은 'Do it 자바 완전 정복' 책을 통한 공부내용을 정리한 글입니다.
패키지
패키지(package)는 비슷한 목적으로 생성된 클래스 파일들을 한 곳에 모아 둔 폴더를 의미한다. 1개의 프로젝트에 1개의 패키지를 생성할 수도 있고, 여러 개의 패키지를 생성할 수도 있다. 패키지를 아예 생성하지 않아도 문법적으로는 전혀 문제가 없다.
패키지의 생성하지 않았을때 package 구문은 포함되지 않는다. 패키지가 있을 때는 소스 코드의 첫 번째 줄에 반드시 package 패키지명
이 명시되어 있어야 한다.
패키지 사용으로 얻을 수 있는 장점은 클래스명의 충돌을 방지할 수 있다는 것이다. 일반적으로 협업시에 패키지명에는 회사의 URL주소를 사용하므로 패키지명으로 사용하면 두 회사가 클래스명을 똑같이 만들어도 통합에 문제가 없다.
임포트
임포트는 다른 패키지 내의 클래스를 사용하기 위한 문법 요소로, 소스 코드상에서 패키지 구문의 다음줄에 위치한다. 프로그램 동작시에 일반적으로 자신의 패키지 내부에 위치한 클래스 만 사용할 수 있다.
자바가 제공하는 API나 다른 개발자가 만든 패키지에 위치한 클래스를 사용하고자 할 때는 어떻게 해야 할까?
클래스의 풀네임 사용
클래스의 풀네임은 '패키지명.클래스명'이다. 우리는 그동안 클래스명만으로 객체를 생성하고 활용했다. 다른 패키지의 클캐스를 사용할 때에는 풀네임을 명시해야 한다.
package sec01_packageimport.common;
public class A { // public class로 선언된 클래스만 다른 패키지에서 사용가능
public int m = 3;
public int n = 4;
public void print() {
System.out.print("임포트");
}
}
package sec01_packageimport.EX01_PackageImport_1;
public class PackageImport_1 {
public static void main(String[] args) {
sec01_packageimport.common.A a = new sec01_packageimport.common.A();
}
}
임포트 사용
실제로 프로그램 작성시에 자바가 제공하는 클래스를 훨씬 많이 사용하므로 그때마다 클래스의 풀 네임을 표현하는 것은 매우 비효율적이다. 이때 패키지 구문의 다음줄에 임포트 구문을 사용해 해소할 수 있다. 패키지 내의 모든 클래스를 임포트하고 싶다면 *를 사용해 모든 클래스를 임포트 할 수 있다.
*기호로 임포트할 때 주의할 점
실제 임포트되는 대상은 소스 코드(.java)가 아닌 bin 폴더에 위치한 컴파일이 완료된 바이트 코드(.class)다. 하위 폴더는 임포트 되지 않으며. 클래스 파일만 임포트된다는 것을 유의하자.
package sec01_packageimport.EX02_PackageImport_2;
import sec01_packageimport.common.A; // A클래스를 임포트
public class PackageImport_2 {
public static void main(String[] args) {
A a = new A();
// 클래스 A를 임포트 했으므로 해당 구문으로 객체 생성 가능
}
}
외부 클래스
외부 클래스(external class)는 public 클래스의 외부에 추가로 정의한 클래스를 말한다. 1개의 소스 파일안에서 public 클래스를 제외한 모든 클래스는 외부 클래스다. public 클래스가 아니면 다른 패키지에서 임포트 할 수 없으므로 외부 클래스는 같은 패키지 안에서만 사용할 수 있다.
다른 패키지에서도 외부 클래스 A의 객체를 생성하고자 할 때 유일한 방법은 외부 클래스를 별도의 소스 파일로 분리하는 것이다. 그렇게 되면 해당 외부 클래스도 public 클래스로 선언할 수 있으므로 다른 패키지에서 임포트 할 수 있다.
'Backend > JAVA' 카테고리의 다른 글
[Java] #11 자바제어자 2 - final, abstract (1) | 2023.06.01 |
---|---|
[Java] #9 자바 제어자 1 - 접근지정자, static (0) | 2023.05.28 |
[Java] #5.2 참조자료형 - 문자열 (0) | 2023.05.21 |
[Java] #5.1 참조 자료형 - 배열 (0) | 2023.05.16 |
[Java] #4 제어문과 제어 키워드 (1) | 2023.05.15 |