본문 바로가기
  • soobinhand의 기술 블로그
도서/자바 프로그래밍 언어 - James Gosling

[자바 프로그래밍 언어] 18장 패키지

by soobinhand 2022. 1. 7.
728x90

18.1     패키지 명명

  • 패키지는 독립적으로 배포되거나 애플리케이션 제작을 위해 다른 패키지와 조합될 수 있는 소프트웨어 단위를 정의한다. 패키지는 클래스와 인터페이스, 하위 패키지와 관련된 멤버를 가질 수 있으며 추가적으로 패키지 내의 클래스가 사용하는 자원 파일들도 포함될 수 있다.
  • 패키지는 서로 관련된 인터페이스와 클래스를 그룹화할 수 있다.
  • 패키지는 타입들 간에 이름 충돌이 발생하는 것을 피하기 위해 네임 스페이스를 생성한다.
  • 패키지는 애플리케이션 프레임워크 개발을 위해 보호 도메인을 제공한다. 패키지 내의 코드들은 식별자를 통해 서로 호출할 수 있다. 하지만 이 식별자는 외부에서 사용 불가.
  • 패키지 선언은 클래스나 인터페이스 선언에 앞서서 소스 파일의 가장 앞부분에 작성되어야 한다.
  • 시스템은 적어도 하나의 무명 패키지를 지원해야 하며 클래스 로더 별로 한 개씩 지원할 수 있으므로 무명 패키지는 여러 개가 될 수 있다.
  • 패키지 이름은 다른 패키지 이름과 충돌하지 않아야 하므로 패키지 이름을 의미 있고 유일하게 명명하는 것은 패키지 설계에서 중요한 부분이다.
  • 패키지 이름이 유일할 수 있도록 인터넷 도메인 이름을 사용해야 한다.
  • www.abc.com 이라면 패키지 이름은 package com.abc.www 가 된다.
  • 도메인 이름 각각의 구성 요소들이 도메인 명명 협약에 따라 앞뒤 순서가 뒤바뀐다는 것에 주의.

18.2     타입 임포트

  • import attr.*; 
  • 이건 요청 임포트이다. 패키지를 가져오는 것이다. attr 패키지 내에 있는 모든 클래스에 접근 가능.
  • import attr.Attributed;
  • 이건 단일 타입 임포트이다. attr 패키지 내의 Attributed 클래스만 가져온 것이다.

18.3     패키지 접근

  • public 이 아닌 타입은 패키지 범위를 가진다. 이 타입은 동일한 패키지 내의 다른 코드가 모두 사용할 수 있다. 하지만 패키지 외부와 하위 패키지에서는 보이지 않는다.
  • public, protected, private로 선언하지 않은 클래스 멤버는 패키지 내의 모든 코드가 사용할 수 있다. 하지만 패키지 외부에서는 이 멤버에 접근할 수 없다. 다시 말해서, 식별자의 기본 접근은 package이다. 다만 접근성을 지정하지 않아도 자동으로 public이 되는 인터페이스 멤버는 예외.
  • 패키지에서 private로 선언하지 않은 필드나 메소드는 소속 패키지의 모든 코드가 사용할 수 있다. 그래서 동일한 패키지 내의 클래스들은 상호 접근할 수 있는 관계가 된다. 하지만 하위 패키지는 상위 패키지를 접근할 수 없으며 반대의 경우도 마찬가지이다. 예를 들어, dit 패키지 내의 패키지 식별자는 dit.dat 패키지 내에 있는 코드를 이용할 수 없으며 이 반대도 마찬가지이다.
  • 모든 타입은 다음과 같은 협약을 가진다.
    • public 협약은 타입의 주요 기능을 정의한다.
    • protected 협약은 서브 타입이 사용할 수 있는 특수 목적을 위한 기능을 정의한다.
    • package 협약은 패키지 내의 타입들 간에 서로 협력하기 위한 기능을 정의한다.

18.4     패키지 내용

  • 패키지는 주의 깊게 설계해서 기능적으로 연관된 클래스와 인터페이스를 포함할 수 있게 해야 한다.
  • private으로 선언하지 않은 멤버는 패키지 내 모든 타입이 접근하여 사용할 수 있다.
  • 패키지는 다른 패키지 내에 중첩될 수 있다. 예를 들어, java.lang은 중첩 패키지로서 lang은 더 큰 패키지인 java에 중첩되어 있다. 중첩은 연관된 패키지들을 계층적으로 표현할 수 있다.
  • 패키지를 중첩함으로써 서로 관련된 패키지들을 조직화할 수 있다.

18.5     패키지 어노테이션

18.6     Package 객체와 명세

728x90

댓글