본문 바로가기

프로그래밍언어/Java

[Java 기본] 패키지

패키지


쇼핑몰 시스템을 만든다고 가정해보자. 프로그램이 작고 단순해서 클래스가 몇 개 없다면 상관 없겠지만, 프로그램이 커지면 어떻게 될까?

관련 기능을 분류해서 관리하고 싶을 것이다. 컴퓨터에는 디렉터리라는 기능이 있다. 자바도 이런 개념을 개공하는데 이것이 패키지이다. 

 

패키지 사용


패키지 'pack'을 만들어보자. 

package pack;

public class Data {
    public Data(){
        System.out.println("패키지 pack data 생성");
    }
}

 

상단에 package를 명시해야 한다. 

 

이번에는 위에서 생성한 패키지 하위에 패키지를 만들어보자. 

 

package pack.a;

public class User {
    public User(){
        System.out.println("패키지 pack.a");
    }

}

 

pack 패키지 안에 PackageMain 클래스 생성

public class PakageMain1 {
    
    public static void main(String[] args) {
        Data data = new Data();
        
        pack.a.User user = new pack.a.User();
    }
}

같은 패키지에 있으면 경로를 생략해도 된다. 다른 패키지에 있을 경우 전체 경로를 적어주어야 한다. 

 

 

패키지 import


이전 코드를 보면 다른 패키지를 가져다 쓸 때 전체 경로를 쓰는 부분이 있는데, 약간 불편하다.

이 코드를 수정해보자 .

package pack;

import pack.a.User;

public class PakageMain2 {

    public static void main(String[] args) {
        Data data = new Data();

        User user = new User();
    }
}

=> 다른 사용하고자 하는 패키지를 import 해주면 경로를 적지 않더라도 사용할 수 있다. 

 

* 특정 패키지에 포함된 모든 클래스를 import 하고 싶으면 import pack.a.* 이런식으로 사용할 수 있다. 

 

 

클래스 이름 중복


패키지 덕분에 클래스 이름이 같아도 패키지 이름으로 구분해서 같은 이름의 클래스를 사용할 수 있다.

 

만약 이름이 같은 두 개의 클래스를 모두 import해서 쓰고 싶으면 어떻게 할까?

 

package pack;

import pack.a.User;

public class PakageMain3 {

    public static void main(String[] args) {
        Data data = new Data();

        User userA = new User();
        pack.b.User userB = new pack.b.User();
    }
}

=> 이 경우 하나의 패키지를 import 했다면 다른 패키지는 경로를 적어줘야 한다.

 

 

패키지 규칙


 

  • 패키지의 이름과 위치는 폴더(디렉터리) 위치와 같아야 한다. 
  • 패키지의 이름은 모두 소문자를 사용한다.(관례)
  • 패키지 이름의 앞부분에는 일반적으로 회사의 도메인 이름을 거꾸로 사용한다. 

 

 

* 인프런 '김영한의 실전 자바 - 기본편'을 참고하여 작성하였습니다.