응애개발자
article thumbnail
Published 2023. 12. 18. 22:35
[Java] 패키지 Language/Java
728x90

1. 패키지

1-1. 패키지 개요

여러분이 만약 쇼핑몰 시스템을 개발한다고 가정해보겠습니다. 처음에는 프로그램이 매우 작고 단순해서 클래스가 몇게 없다면 고민할 거리가 없겠지만, 기능이 점점 추가되어서 프로그램이 점점 커지게 된다면 관련 있는 기능들을 분류해서 관리하고 싶을 것입니다. 컴퓨터는 보통 파일을 분류하기 위해 폴더, 디렉토리라는 개념을 사용합니다. 자바도 이런 개념을 제공하는데, 이것이 바로 패키지입니다.

 

 

1-1-1. 패키지 사용

패키지는 패키지를 먼저 만들고 그 다음에 클래스를 만들어야 합니다. 패키지의 자세한 내용은 예시 코드를 통해 말씀드리겠습니다.

 

먼저 pack 패키지에 Data클래스를 만들어보겠습니다.

package pack;

public class Data {

 public Data() {
 System.out.println("패키지 pack Data 생성");
 
 }
}
  • 패키지는 항상 코드 첫줄에 package pack과 같이 패키지 이름을 적어주어야 합니다.
  • 여기서 pack 패키지에 Data 클래스를 만들었습니다.
  • 이후에 Data 인스턴스가 생성되면 생성자를 통해 정보를 출력합니다.

이후 pack패키지 안에 a 패키지를 만들어 User클래스를 만들어보겠습니다.

package pack.a;

public class User {

 public User() {
 System.out.println("패키지 pack.a 회원 생성");
 }
 
}
  • pack 하위에 a라는 패키지를 먼저 만들었습니다.
  • pack.a 패키지에 User 클래스를 만들었습니다.
  • 이후에 User 인스턴스가 생성되면 생성자를 통해 정보를 출력합니다.

다음은 pack패키지에 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 Data 생성
패키지 pack.a 회원 생성

패키지 구조

  • 사용자와 같은 위치 : PackageMain1과 Data는 같은 pack이라는 패키지에 소속되어 있습니다. 이렇게 같은 패키지에 있는 경우에는 패키지 경로를 생략해도 됩니다.
  • 사용자와 다른 위치 : PackageMain1과 User는 서로 다른 패키지입니다. 이렇게 패키지가 다르면 pack.a.User와 같이 패키지 전체 경로를 포함해서 클래스를 적어주어야 합니다.

1-2. 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 사용으로 패키지 명 생략 가능
    }
}

//출력 결과
패키지 pack Data 생성
패키지 pack.a 회원 생성

import를 사용하면 다른 패키지에 있는 클래스를 가져와서 사용할 수 있습니다.

import를 사용한 덕분에 코드에서는 패키지 명을 생략하고 클래스 이름만 적을 수 있습니다.

 

참고로 특정 패키지에 포함된 모든 클래스를 포함해서 사용하고 싶으면 import 시점에 *(별)을 사용하면 됩니다.

package pack;

import pack.a.*;

public class PackageMain2 {
    public static void main(String[] args) {
        Data data = new Data();
        User user = new User(); //import 사용으로 패키지 명 생략 가능
    }
}

이렇게 하면 pack.a 패키지에 있는 모든 클래스 명을 생략하고 사용할 수 있습니다.

 

1-3. 클래스 이름 중복

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

pack.a.User
pack.b.User

 

 

같은 이름의 클래스가 있다면 import는 둘 중 하나만 선택할 수 있습니다. 이때는 자주 사용하는 클래스를 import하고 나머지를 패키지를 포함한 전체 경로를 적어주면 됩니다. 물론 둘 다 전체 경로를 적어준다면 import를 사용하지 않아도 됩니다.

 

전체 코드

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();
    }
}

 

1-4. 패키지 규칙

  • 패키지의 이름과 위치는 폴더(디렉토리) 위치와 같아야 합니다. (필수)
  • 패키지 이름은 모두 소문자를 사용합니다. (관례)

1-4-1. 패키지와 계층 구조

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

  • a
    • b
    • c

이렇게 하면 총 3개의 패키지가 존재합니다. a, a.b, a.c

'Language > Java' 카테고리의 다른 글

[Java] 접근 제어자  (0) 2023.12.26
[Java] 생성자  (0) 2023.12.18
[Java] 절차지향, 객체 지향 프로그래밍  (0) 2023.12.17
[Java] 변수와 초기화  (0) 2023.12.17
[Java] 인자, 매개변수  (1) 2023.12.14
profile

응애개발자

@Eungae-D

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!