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
'도서 > 자바 프로그래밍 언어 - James Gosling' 카테고리의 다른 글
[자바 프로그래밍 언어] 20장 I/O 패키지 (0) | 2022.01.09 |
---|---|
[자바 프로그래밍 언어] 19장 문서화 주석 (0) | 2022.01.09 |
[자바 프로그래밍 언어] 17장 가비지 컬렉션과 메모리 (0) | 2022.01.06 |
[자바 프로그래밍 언어] 16장 리플렉션 (0) | 2022.01.05 |
[자바 프로그래밍 언어] 15장 어노테이션 (0) | 2022.01.04 |
댓글