자바 기본 | 5. 패키지

heige·2024년 5월 21일

Java

목록 보기
19/21
post-thumbnail

패키지 - 시작

클래스들을 관련 있는 기능들끼리(카테고리화) 분류해서 관리하는 개념을 패키지라고 한다.

패키지 사용

package pack;

public class Data {
    public Data() {
        System.out.println("package pack Data gen");
    }
}
  • 패키지를 사용하는 경우 항상 코드 첫줄에 package pack과 같이 패키지 이름을 적어줘야 한다.
package pack.a;

public class User {
    public User() {
        System.out.println("package pack.a user gen");
    }
}
  • pack 하위에 a라는 패키지를 먼저 만들자.
  • pack.a 패키지에 User 클래스를 만들었다.

c.f
생성자에 public 을 사용했다. 다른 패키지에서 이 클래스의 생성자를 호출하려면 public 을 사용해야 한다. 자세한 내용은 접근 제어자 파트에서..

package pack;

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

pack 패키지 위치에 PackageMain1 클래스를 만든다.

  • 같은 패키지에 소속된 클래스의 경우 패키지 경로를 생략한다.
  • 다른 패키지 위치에 소속되었다면 패키지 전체 경로를 포함해서 클래스를 적어줘야 한다. (PackageMain1User)

패키지 - import

import

pack.a.User와 같이 항상 전체 경로를 적는 것은 불편하다. 이때는 import를 사용하면 된다.

package pack;

import pack.a.User;
public class PackageMain2 {
    public static void main(String[] args) {
        Data data = new Data();
        User user = new User();
    }
}
  • import 를 사용했기 때문에 코드에서 패키지 명을 생략하고 클래스 이름만 적을 수 있다.

특정 패키지에 포함된 모든 클래스를 포함해서 사용하고 싶으면 import 시점에 *사용하면 된다.

package pack;

import pack.a.*;

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

클래스 이름 중복

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

package pack.b;

public class User {
    public User() {
        System.out.println("package pack.b. user gen");
    }
}
package pack;

import pack.a.User;

public class PackageMain3 {
    public static void main(String[] args) {
        User userA = new User();
        pack.b.User userB = new pack.b.User();
    }
}

자주 사용하는 클래스를 import 하고 나머지를 패키지를 포함한 전체 경로를 적어주면 된다. 물론 둘다 전체 경로를 적어준다면 import 를 사용하지 않아도 된다.

패키지 규칙

패키지 규칙

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

패키지와 계층 구조

패키지는 계층 구조를 이룬다.

  • a
    • b
    • c

a, a.b, a.c
세 가지 패키지가 존재하게 된다.

➡️ 패키지가 계층 구조를 이루더라도 모든 패키지는 서로 다른 패키지이다.

패키지 활용

예제 통해 패키지 사용법 알아보기.

전체 구조도

  • com.helloshop
    • user
      • User
      • UserService
    • product
      • Product
      • ProductService
    • order
      • Order
      • OrderService
      • OrderHistory

package com.helloshop.user;

public class User {
    String userId;
    String name;
}
package com.helloshop.user;

public class UserService {
}
package com.helloshop.product;

public class Product {
    String productID;
    int price;
}
package com.helloshop.product;

public class ProductService {
}
package com.helloshop.order;

import com.helloshop.product.Product;
import com.helloshop.user.User;
public class Order {
    User user;
    Product product;

    public Order(User user, Product product) {
        this.user = user;
        this.product = product;
    }
}

다른 패키지의 기능이 필요하면 import를 사용하면 된다.
public이 붙어있어야 다른 패키지에서 생성자를 호출할 수 있다.

package com.helloshop.order;

import com.helloshop.product.Product;
import com.helloshop.user.User;
public class OrderService {
    public void order() {
        User user = new User();
        Product product = new Product();
        Order order = new Order(user, product);
    }
}
package com.helloshop.order;

public class OrderHistory {
}
profile
웹 백엔드와 클라우드 정복을 위해 탄탄한 기반을 쌓아가고 있는 예비개발자입니다. 'IT You Up'은 'Eat You Up'이라는 표현에서 비롯되어, IT 지식을 끝까지 먹어치운다는 담고 있습니다.

0개의 댓글