[Java 기본]Section 5 - 패키지

우영·2024년 2월 10일

JAVA 기본편

목록 보기
5/13

패키지

패키지 사용

  • 패키지를 사용하는 경우 항상 코드 첫줄에 package pack과 같이 패키지 이름을 적어주어야 한다.
package pack.a;
public class User {
 public User() {
 System.out.println("패키지 pack.a 회원 생성");
 }
}
  • pack 하위에 a 라는 패키지를 먼저 만들자.
  • pack.a 패키지에 User 클래스를 만들었다.
  • 이후에 User 인스턴스가 생성되면 생성자를 통해 정보를 출력한다.
    참고: 생성자에 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();
 }
}
  • 사용자와 같은 위치: PackageMain1 과 Data 는 같은 pack 이라는 패키지에 소속되어 있다. 이렇게 같은 패키지에 있는 경우에는 패키지 경로를 생략해도 된다.
  • 사용자와 다른 위치: PackageMain1 과 User 는 서로 다른 패키지다. 이렇게 패키지가 다르면 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 사용으로 패키지 명 생략 가능
 }
}
  • 코드 첫 줄에는 package를 사용하고, 다음 줄에는 import를 사용할 수 있다.
  • import를 사용하면 다른 패키지에 있는 클래스를 가져와서 사용할 수 있다. -> import를 사용한 덕분에 패키지 명을 생략하고 클래스 이름만 적을 수 있다.

패키지 별(*) 사용

  • import pack.a.*; //pack.a의 모든 클래스 사용

클래스 이름 중복

package pack.b;
public class User {
 public User() {
 System.out.println("패키지 pack.b 회원 생성");
 }
}
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하고 나머지는 전체 경로로 적어준다.

패키지 규칙

  • 패키지의 이름과 위치는 폴더 위치와 같아야한다.(필수)
  • 패키지 이름은 모두 소문자를 사용한다.(관례)
  • 패키지 이름의 앞 부분에는 일반적으로 회사의 도메인 이름을 거꾸로 사용한다. 예를 들어, com.company.myapp과 같이 사용한다.(관례지만 그냥 지키는 것이 좋다.)

패키지와 계층 구조

패키지는 보통 다음과 같이 계층 구조를 이룬다.

  • a
    • b
    • c

이렇게 하면 다음과 같이 총 3개의 패키지가 존재한다.
a , a.b , a.c 서로 완전히 다른 패키지이다. a 패키지의 클래스에서 a.b 패키지의 클래스가 필요하면 import 해서 사용해야 한다. 반대도 마찬가지

정리하면 패키지가 계층 구조를 이루더라도 모든 패키지는 서로 다른 패키지이다. 물론 사람이 이해하기 쉽게 계층 구조를 잘 활용해서 패키지를 분류하는 것은 좋다. 참고로 카테고리는 보통 큰 분류에서 세세한 분류로 점점 나누어진다. 패키지도 마찬가지이다.

패키지 활용

  • 실무에서 어떤식으로 사용되는지.
package com.helloshop.user;
public class User {
 String userId;
 String name;
}
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;
 }
}
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 {
}

0개의 댓글