Skip to content

Latest commit

 

History

History
79 lines (55 loc) · 3.78 KB

File metadata and controls

79 lines (55 loc) · 3.78 KB

패키지란?

패키지는 폴더 또는 디렉토리와 같은 개념이다. 보통 패키지는 비슷한 기능을 하는 파일이나 폴더들을 모아놓은 것이다. 예를 들어, user 패키지에 User Entity 파일이 있을 수 있고, UserService 파일이 있을 수 있다.

패키지를 사용하는 이유

패키지를 사용하는 이유는 간단하다. 관련된 파일들이 특정 패키지에 존재하기 때문에 자료를 찾는 데 있어 매우 편리하다. 프로그램 규모가 커지면서 파일들 또한 많이 생겨날텐데, 패키지 없이 파일들만 존재하면 관리가 어려워진다.

즉, 패키지는 클래스를 그룹화하여 이런 복잡성을 해결해주는 역할을 한다.

패키지 위치

패키지는 위치에 따라 패키지 내의 파일을 어떻게 활용할 수 있는가가 달라진다. 예를 들어, com.example.user 패키지에 있는 UserService는 com.example 패키지에 있는 다른 클래스에서 쉽게 접근할 수 있지만, com.example.admin 패키지에 있는 클래스에서는 접근이 제한될 수 있다. 이러한 개념은 접근 제한자와도 긴밀한 관계가 있다. 이 내용에 대해서는 해당 챕터에서 알아보기로 하자.

public class PackageMain1 {

  public static void main(String[] args) {
    Data data = new Data();
    pack.a.User user = new pack.a.User();
  }
}
  • 사용자와 같은 위치 (Data 객체)
    • 같은 패키지에 있는 경우에는 패키지 경로를 생략해도 된다.
  • 사용자와 다른 위치 (User 객체)
    • 패키지가 다르면 패키지 전체 경로를 포함해서 클래스를 적어줘야 한다.

import 문

import 문은 다른 패키지에 있는 클래스를 사용할 때 사용한다. import 문을 사용하면 패키지 경로를 생략하고 클래스 이름만으로도 해당 클래스를 사용할 수 있다.

import pack.a.*;

public class PackageMain2 {

  public static void main(String[] args) {
    Data data = new Data();
    User user = new User(); // import 사용으로 패키지 명 생략 가능
    User2 user2 = new User2(); // import 사용으로 패키지 명 생략 가능
  }
}
    • 문법을 사용하면 해당 패키지 내의 모든 클래스를 import 할 수 있다.
  • 만약, 다른 패키지에 있는 같은 이름의 클래스를 사용하고 싶다면, 자주 사용하는 클래스만 import 하고, 나머지 클래스는 패키지 경로를 포함해서 사용하면 된다.

패키지 규칙

  • 패키지 이름은 모두 소문자를 사용하는 것이 관례이다.
  • 패키지 이름의 앞 부분에는 일반적으로 회사의 도메인 이름을 거꾸로 사용하는 것이 관례이다. 예를 들면, com.naver.map 과 같이 사용한다. 이렇게 사용하는 주된 목적은 외부 라이브러리와의 이름 충돌을 방지하기 위해서이다.

패키지 계층 구조

보통 패키지는 계층 구조로 이루어져 있다. 예를 들어, com.example.user 패키지는 com.example 패키지의 하위 패키지이다. 이러한 계층 구조는 패키지를 더욱 세분화하고 관리하기 쉽게 만들어준다.

여기서 헷갈리면 안되는 사실이 있다.

a
├── b
└── c

위와 같은 패키지 계층 구조가 있다고 치자. a 패키지, a.b 패키지, a.c 패키지는 모두 서로 다른 패키지이다. a 패키지에서 a.b 패키지의 클래스를 호출하려면 역시나 import 문을 사용해야 한다. 즉, 패키지 계층 구조가 있다고 해서 모든 패키지의 클래스를 자동으로 사용할 수 있는 것은 아니다.

결론

패키지를 관리할 때에는 기능적 또는 논리적으로 관련 있는 클래스들을 하나의 패키지에 모아두도록 하자!