TIL/JAVA

[JAVA] 패키지

아람2 2024. 12. 19. 21:23
반응형

듣고 있는 강의 - 김영한의 실전 자바 기본편 

 

패키지

컴퓨터가 파일을 분류하기 위해 폴더, 디렉토리라는 개념을 제공하는 것처럼

자바도 이런 개념을 제공하는데, 이것이 바로 패키지이다 

패키지 Package 는 이름 그대로 물건을 운송하기 위한 포장 용기나 그 포장 묶음을 뜻한다 

패키지 사용

패키지를 사용하는 경우 항상 코드 첫 줄에 package 이름을 적어 주어야 한다 

package pack; // 항상 코드 첫 줄에 package 이름을 적어준다 

public class Data {
    public Data() {
        System.out.println("패키지 pack Data 생성");
    }
}

 

Package 이름이 없는 경우 아래와 같이 오류가 발생한다 

참고 - 생성자에 public 을 사용했다, 다른 패키지에서 이 클래스의 생성자를 호출하려면 public 을 사용해야 한다 

 

pack 패키지 위치에 Data, pack.a 패키지 위치에 User 가 있을 때

pack 패키지 위치에 있는 PackageMain1 에서 Data 와 User 클래스를 둘 다 사용하고 싶다면 

package pack.a; // pack.a 위치에 있는 User

public class User {
    public User() {
        System.out.println("패키지 pack.a 회원 생성");
    }
}
package pack; // pack 위치에 있는 Data

public class Data {
    public Data() {
        System.out.println("패키지 pack Data 생성");
    }
}
package pack;

public class PackageMain1 {
    public static void main(String[] args) {
        Data data = new Data(); // 같은 패키지 내 클래스 호출
        pack.a.User user = new pack.a.User(); // 다른 위치 클래스 호출
    }
}

다른 패키지 위치에 있는 User 를 사용하기 위해서 pack.a.User 처럼 패키지 전체 경로를 포함해서 클래스를 적어준다 

패키지 - import 

전체 경로를 적어주는, 불편한 점을 개선하기 위해 import 를 사용할 수 있다 

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 시점에 별 * 을 사용하면 된다 

import pack.a.*; // pack.a 의 모든 클래스를 패키지 명을 생략하고 사용 가능

클래스 이름 중복 

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

단, 둘 다 import 할 수는 없기 때문에 자주 사용하는 클래스를 import 해주는 것이 편리하다 

package pack;

import pack.a.User;
// pack.a 의 User 는 import 했지만 
// pack.b 의 User 는 import 하지 못 하고 모두 명시해준다 

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

 

패키지 규칙 

패키지의 이름과 위치는 폴더 (디렉토리) 위치와 같아야 한다 

패키지 이름은 모두 소문자를 사용한다 - 대소문자를 구분하지 않는 OS 대비

패키지 이름의 앞 부분에는 일반적으로 회사의 도메인 이름을 거꾸로 사용한다 ex. com.company.myapp

패키지 계층 구조 

패키지가 아래와 같이 계층 구조를 이룰 때, 패키지는 a, a.b, a.c 총 3개의 패키지가 존재한다 

계층 구조 상 a 패키지 하위에 a.b 패키지와 a.c 패키지가 있는 것처럼 보이지만

a 패키지와 a.b, a.c 패키지는 서로 완전히 다른 패키지이다 

a 패키지의 클래스에서 a.b 패키지의 클래스가 필요하면 import 해서 사용해야 한다 

a
└ b
└ c

 

패키지를 구성할 때 서로 관련된 클래스는 하나의 패키지에 모으고,

관련이 적은 클래스는 다른 패키지로 분리하는 것이 좋다 

 

반응형

'TIL > JAVA' 카테고리의 다른 글

[JAVA] 어노테이션 사용  (0) 2024.12.26
[JAVA] 접근 제어자  (1) 2024.12.25
[JAVA] 생성자  (0) 2024.12.11
[JAVA] 어노테이션 Annotation  (2) 2024.12.10
[JAVA] 객체 지향 프로그래밍  (5) 2024.12.06