Java 패키지

쇼핑몰 같은 시스템을 개발한 경우, 작은 프로그램부터 시작하여 클래스가 몇개 없다면 상관 없으나, 점점 추가되면 어떻게 될까?

쇼핑몰 작은 프로그램의 클래스

Order
User
Product

쇼핑몰 큰 프로그램의 클래스

User
UserManager
UserHistory
Product
ProductCatalog
ProductImage
Order
OrderService
OrderHistory
ShoppingCart
CartItem
Payment
PaymentHistory
Shipment
ShipmentTracker

작은프로그램으로 시작해서 큰 프로그램의 클래스로 확장하면서 관련 기능을 분류하고 관리하고 싶을 것이다.

컴퓨터는 보통 파일 분류 기능으로 폴더, 디렉토리라는 개념을 제공한다. 자바도 이러한 패키지라는 이름으로 제공하고 있다.

큰 프로그램의 클래스 카테고리를 만들고 분류한다.
분류가 끝난 후 user, product 로 자바 패키지가 만들어지고 관련 자바 클래스를 묶는다.

* user
  - User
  - UserManager
  - UserHistory
* product
  - Product
  - ProductManager
  - ProductImage
* order
  - Order
  - OrderService
  - OrderHistory
* cart
  - ShoppingCart
  - CartItem
* payment
  - Payment
  - PaymentHistory
* shipment
  - Shipment
  - ShipmentTracker

UserManager, UserHistory 대문자로 시작하는 것이 클래스이다. 이 클래스를 묶은 것이 user, product 등등 패키지로 관리하도록 한다.

패키지(package)는 물건을 운송하기 위한 포장 용기나 포장 묶음이다.


패키지 사용하기

자바에서 패키지를 먼저 만들고 클래스를 만들어 분류해보도록 한다.
그리고 패키지 위치를 주의해서 생성하여야한다.

다음 경로에 신규 패키지를 생성하고, Data 클래스를 넣도록 한다.

source
└src
    └pack
        └Data.class (*)

Data.java

  • 패키지 첫 줄에 항상 package pack; 패키지 이름을 포함해서 지어주어야 한다.
  • Data.class 는 pack 패키지 내부에 위치하여야 한다.
  • Data 인스턴스 생성한 경우 메시지를 출력하는 코드를 작성하였다.
  • public 접근 제어를 넣어 다른 패키지에서도 호출하도록 한다.
package pack;

public class Data {
    public Data() {
        System.out.println("this pack Package. Data Constructor");
    }
}

pack.sub 신규 패키지 생성

pack 패키지 내부에 sub 하위 패키지를 만들어 User.class 를 넣어주도록 한다.

source
└src
    └pack
        ├Data.class
        └sub
            └User.class (*)

User.java

  • 패키지 첫 줄에 항상 package pack.sub; 패키지 이름을 포함해서 지어주어야 한다.
  • User.class 는 pack.sub 패키지 내부에 위치하여야 한다.
  • User 인스턴스 생성한 경우 메시지를 출력하는 코드를 작성하였다.
  • public 접근 제어를 넣어 다른 패키지에서도 호출하도록 한다.
package pack.sub;

public class User {
    public User() {
        System.out.println("this pack.sub Pacakge. User Constructor");
    }
}

main 에서 User, Data 생성자 호출하기

작성한 User, Data 생성자를 main에서 패키지를 호출하는 방법을 알아보자. public 으로 접근제어를 설정했기에 어느 곳에서도 호출할 수 있다.

해당 경로에 먼저 main 이 들어갈 PackageMain 클래스를 생성한다.

source
└src
    └pack
        ├PackageMain.class (+)
        ├Data.class
        └sub
            └User.class

PackageMain

  • pack 패키지 내부에 메인으로 실행할 PackageMain 클래스를 작성하였다.
  • 같은 pack 패키지에 있는 Data는 Data data = new Data(); 코드로 호출할 수 있다.
  • pack.sub 패키지에 있는 User 를 호출하려면 pack.sub.User user = new pack.sub.User(); 패키지명을 포함해서 선언해주도록 한다.
package pack;

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

출력 결과

this pack Package. Data Constructor
this pack.sub Package. User Constructor