[Java] 패키지

szlee·2023년 12월 7일
0

Java

목록 보기
14/23

< 김영한의 실전 자바 - 기본편 > 강의를 보고 이해한 내용을 바탕으로 합니다.





패키지

자바에서 폴더, 디렉토리와 같은 개념.

package pack;

public class Data {
    public Data(){ //다른 패키지에서 이 클래스의 생성자를 호출하려면 'public'을 사용해야한다.
        System.out.println("패키지 pack data 생성");
    }
}

pack패키지 하위에 Data 클래스를 생성했다.

package pack.a;

public class User {
    public User(){
        System.out.println("패키지 pack.a 회원 생성");
    }
}

pack패키지 하위에 a패키지를 생성하고 그 아래에 User클래스를 생성했다.

package pack;

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

PackageMain1pack패키지 하위에 있으므로 같은 패키지 내에 있는 Data는 그냥 쓰면 되고(경로 생략), 다른 패키지(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();
    }
}

코드 첫 줄에는 package를 명시하고 다음 줄에는 import를 쓸 수 있다.
import를 사용하면 다른 패키지에 있는 클래스를 가져와서 사용할 수 있다.
import를 사용한 덕분에 코드에서는 패키지 명을 생략하고 클래스 이름만 적을 수 있다.

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



클래스 이름 중복

패키지 덕분에 클래스 이름이 같아도 패키지 이름으로 구분해서 같은 이름의 클래스를 사용할 수 있는데, 이름이 같은 경우 둘 다 사용하고 싶다면?

pack.a.User
pack.b.User
package pack;

import pack.a.User;

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

둘 중 하나는 무조건 경로를 모두 적어줘야 한다😅
(자주 사용하는 클래스를 import하자)



패키지 규칙

규칙

  • 패키지의 이름과 위치는 실제 폴더(디렉토리) 위치와 같아야 한다. (필수)
  • 패키지 이름은 모두 소문자를 사용한다. (관례)
  • 패키지 주로 이름 큰개념 -> 세부개념으로 사용한다. (관례 ) com.commpany.myapp
    • 회사 도메인 이름 거꾸로 : ~myapp.company.com
    • 수많은 외부 라이브러리가 함께 사용되면 같은 패키지에 같은 클래스 이름이 존재할 수 있기 때문에 도메인 이름을 거꾸로 사용하면 이런 문제를 방지할 수 있다.

계층 구조

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

* a
   * b
   * c

이렇게 총 세개의 패키지가 존재한다.
계층 구조 상 a 패키지 하위에 a.b 패키지와 a.c 패키지가 있다.
그런데 이는 우리 눈에 보기에 계층구조인거지 a패키지와 a.b, a.c 패키지는 완전히 다른 패키지이다.
따라서 서로의 패키지의 클래스가 필요하면 import를 사용해야한다.
즉, 패키지가 계층 구조를 이루더라도 모든 패키지는 서로 다른 패키지이다.



패키지 활용


패키지 구성할 때 서로 관련된 클래스는 하나의 패키지에 모으고 관련이 적은 클래스는 다른 패키지로 분리하는 것이 좋다.

profile
🌱

0개의 댓글