패키지

상훈·2024년 5월 21일

패키지

자바에서 매우 많은 클래스를 관련 있는 기능들끼리 분류하여 디렉토리처럼 관리하는 개념

# 예시

ㅁ user
	* User
	* UserManger
	* UserHistory
ㅁ product
	* Product
	* ProductCatalog
	* ProductImage

위에와서 user, product 가 바로 패키지

패키지 위치에 따른 호출 방법

  • project

    ㅁ pack
    	ㅁ a
    		* User
      * Data
      * PackageMain1
package pack;

public class PackageMain1 {

    public static void main(String[] args) {
      	// 사용자와 같은 위치
        Data data = new Data();
      
      	// 사용자와 다른 위치
        pack.a.User user = new pack.a.User();
    }
}

사용자와 패키지의 위치가 다를 때는 풀네임을 적어줘야함 (pack.a.User)

하지만 위 pack.a.User 같이 전체 경로를 전부 적어주는 것은 매우 불편 -> import 를 사용해서 해결

Import

package pack;

// import
import pack.a.User;

public class PackageMain2 {

    public static void main(String[] args) {
        Data data = new Data();
      
      	// 경로를 import 했기 때문에 경로를 생랙 가능
        User user = new User();
    }
}

만약 pack.a 패키지의 여러가지 클래스를 가져다 사용하고 싶다면 pack.a.* 사용

클래스 이름 중복 가능

패키지가 다르면 클래스 이름이 같아도 사용 가능

pack.a.User
pack.b.User

위와 같은 상황에 두 User클래스를 import 하는 방법

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 하고 다른 하나는 전체 경로를 입력하여 호출한다.

이럴 경우에는 주로 사용하는 User 클래스만 import 하고 어쩌다 한 번씩 사용한 User클래스는 전체 경로를 불러와서 사용하는 방식으로 사용

패키지 규칙

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

패키지와 계층 구조

  • package

    ㅁ a
    	ㅁ b
    	ㅁ c

위와 같은 경우는 총 3개의 패키지

a, a.b, a.c

a패키지와 a.b, a.c 패키지는 서로 완전히 다른 패키지이므로 a패키지에서 a.b 또는 a.c 패키지의 클래스를 가져다 사용하려면 import 해서 사용해야 함.(반대도 마찬가지)

패키지 활용

전체 구조도

  • com.helloshop

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

package com.helloshop.user;

public class User {

    String userId;
    String name;
}
  • com.helloshop.product.Product
package com.helloshop.product;

public class Product {
    String productId;
    int price;
}
  • com.helloshop.order.Order
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;
    }
}
  • com.helloshop.order.OrderService
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);
    }
}
profile
문송 개발자

0개의 댓글