Programing Language/Java

[Java] 자바의 패키지(Package)

vinedpillar 2022. 5. 11. 17:34

패키지

  • 패키지란 클래스의 묶음으로 파일 디렉토리와 비슷하다고 할 수 있습니다.

  • 패키지는 하위에 또 다른 패키지를 둘 수 있으며, 도트(.) 연산자를 활용하여 하위 패키지에 접근할 수 있습니다.

  • 클래스의 이름이 동일해도 속한 패키지가 다르다면 서로 클래스로 인식됩니다.
클래스의 전체 이름 구성

상위패키지.하위패키지.클래스

 

패키지 경로(이름) 예시

// 아래 두 예시의 최종 클래스 이름은 동일하지만 소속이 다르기 때문에 다른 클래스로 인식

// vip학교 패키지의 1학년 패키지의 학생1
vipschool.firstgrade.Student

// vip학교 패키지의 2학년 패키지의 학생1
vipschool.secondgrade.Student

 

 

 

 

package 예약어

  • package 예약어는 클래스의 구성 항목 중 하나로 클래스의 가장 상단에 선언되어 소속된 클래스를 표시해줍니다.

  • 일반적으로 패키지의 이름은 전부 소문자로 작성하는 것이 관례입니다.

  • 중복을 피하기 위해 소속 회사나 기관의 도메인 이름을 역순으로 작성하고, 프로젝트 이름을 마지막에 붙이는 방식으로 작성됩니다.
    (IDE에 따라 패키지와 클래스를 생성하면 그에 맞는 패키지 디렉토리를 자동으로 선언해주기도 함)

  • 만약 패키지 선언 없이 클래스를 컴파일 하면 default 패키지로 포함되게 됩니다.
패키지 선언

package 최상위패키지.하위패키지1.하위패키지2. ... 마지막소속패키지;

public class 클래스이름 {
	
    클래스 내용
    
}

 

 

 

 

import 문

  • 같은 패키지 내에 있는 클래스들은 별도의 제약 없이 서로의 데이터나 메서드를 사용할 수 있습니다.

  • 패키지의 경로가 다른 클래스를 사용하기 위해서는 import 문을 사용하여 어떤 패키지의 클래스인지 선언을 해줘야 합니다. 

  • import문은 패키지 선언과 클래스 선언 사이 자리에 선언됩니다.
    • package 선언과 유사하게 사용하고자 하는 클래스의 전체 이름(경로)를 입력해주면 됩니다.
    • 만약 해당 패키지의 모든 클래스를 사용하고 싶다면 애스터리스크(*)를 사용할 수 있습니다.
    • 단, import 문은 하위 패키지는 포함하지 않기 때문에 하위 패키지의 클래스까지 사용하려 한다면 별도로 표기해주어야 합니다.

  • import를 통해 가져온 각각의 클래스가 이름이 동일할 경우 인스턴스 생성 시 경로를 명확히 선언해주어야 합니다.
    (이는 IDE 차원에서 지원될 수 있음)
임포트 선언

package 최상위패키지.하위패키지. ... 최하위패키지;

// import문 선언 자리
// import문은 필요 시 숫자에 관계없이 추가 가능 
import 최상위패키지.하위패키지. ... 최하위패키지;
import 최상위패키지.하위패키지. ... 최하위패키지;
import 최상위패키지.하위패키지. ... 최하위패키지;

public class 클래스이름 {
	
    클래스 내용

}

 

package와 import 활용 예시

package vipschool.score;

import vipschool.firstgrade.Student;
import vipschool.secondgrade.Student;

public class Score {
    // 학생 인스턴스 생성
    // 아래 방식은 Student 클래스가 각각 다른 경로에 있으므로 지정하지 않으면 오류 발생
    // Student st1 = new Student();
    
    // 아래와 같이 경로를 명시해줘야 생성 가능
    // 단, IDE에 따라 처음 생성시 경로를 지정 후에는 표기를 생략해주는 경우도 있음
    vipschool.firstgrade.Student Student st1 = new vipschool.firstgrade.Student();
    vipschool.secondgrade.Student Student st1 = new vipschool.secondgrade.Student();
    
}