Javaの「package」の目的

Java Silver

パッケージ宣言の目的

クラス定義時に宣言するパッケージ宣言ですが、このパッケージ宣言には以下のような目的があります。

  • クラスの分類を可能にする
  • 名前空間の提供と、名前の衝突を避ける
  • アクセス修飾子と組み合わせることで、アクセス制御を可能にする

補足① パッケージ宣言をしなくても、デフォルトで「無名パッケージ」に属すことになります。

補足② 「jp.co.xxx」のようにドメイン名を逆にしたものがパッケージ名に利用されますが、これは慣例的なものであって、決まり事ではありません。

また、パッケージ名は名前の重複を避けるために利用するため、できるだけ一意なものが推奨されています。

クラスの分類を可能にする

クラスを複数のパッケージに分けることで、パッケージ単位でのクラス分類が可能となります。

名前空間の提供と、名前の衝突を避ける

大規模な開発であればあるほど、「クラス名の衝突」が起こりうる可能性が高くなります。

これは、もし同名のクラスが複数存在してしまうと、コンパイラやJVMはどちらのクラスを利用すればよいか判断ができず、コンパイルエラーや実行時例外の原因となってしまいます。

そのため、コンパイラやJVMはクラスを「パッケージ名.クラス名」の完全修飾クラス名で扱います。

アクセス修飾子と組み合わせることで、アクセス制御を可能にする

「jp.co.xxx」というパッケージに属している以下のクラスがあるとします。

package jp.co.xxx;

public class A(){
}
package jp.co.xxx;

class B(){
}

Aクラスはアクセス修飾子が「public」なので、「どのクラスからもアクセス可能」ですが、

Bクラスはアクセス修飾子が「なし」なので、「当クラスと同じパッケージのクラスからアクセス可能」となります。

上記のようにアクセス修飾子との組み合わせで、クラスへのアクセスを制御することができます。

コメント

タイトルとURLをコピーしました