Java package パッケージとは?

パッケージの概要

パッケージと言う機能は、
複数人での開発となった場合に威力を発揮する機能です。

プログラムの規模が大きくなると、
複数人での開発スタイルとなりますが、

その場合、同じクラス名を使うとエラーとなってしまいます。

それゆえに、クラス名が衝突しない様に、
気を遣う事となります。

プログラマ自身が気をつけなければならないため、
独自の管理体制を持つ必要がありました。

このクラス名衝突問題の管理を
Java言語の中に取り込んだのがパッケージです。

パッケージには、好きな名前をつける事ができ、
そのパッケージがフォルダ(ディレクトリ)機能を提供します。

1つのフォルダの中には同じ名前のファイルを格納できませんが、
異なるフォルダ間であれば、同じファイル名があっても大丈夫です。

これと同じように、
1つのプログラムの中に同じクラス名があってはいけません。

しかし、異なるパッケージ間であれば、
同じクラス名があっても大丈夫です。

と言う事です。

なんとなくイメージがつかめたでしょうか?

パッケージの使い方

パッケージは、フォルダ機能を提供していますが、

手作業でフォルダを作る必要があります。
(プログラム統合開発環境 Eclipse ではパッケージを作る機能があります。)

例えば pkg_hello と言うパッケージを作るとしたら、
パッケージ名と同じ pkg_hello と言うフォルダを作ります。

そして、その pkg_hello パッケージ内に
Chelloクラスを記述したい場合、
pkg_helloフォルダ内に
Chelloクラスを記述したソースファイルを格納します。

スポンサーリンク

パッケージの記述例

package pkg_hello;

public class Chello {
      void show() {
            System.out.println("Hello");
      }
}

先頭行でパッケージ指定しています。

この記述は、このファイルは pkg_helloパッケージに属しています。

と言う意味になります。

そして、もう1つ別のパッケージと
そのパッケージ内のクラスも作ってみます。

package pkg_main;

public class Cmain {
      public static void main(String[] args) {
            pkg_hello.Chello obj = new pkg_hello.Chello();
            obj.show();
      }
}

こちらは、pkg_mainパッケージに属するCmainクラスです。

このpkg_mainパッケージ内から
別のパッケージ内のクラスを指定するには、
パッケージ名.クラス名 と指定する必要があります。

また、パッケージ間でクラスを使う場合は、
クラス修飾子としてpublicを指定しなければなりません。

何も指定しない場合は、
別パッケージからそのクラスを使えません。
(アクセス不可)

同じパッケージ内に限りアクセスできます。

この2つのパッケージを用いた
プログラムフォルダ構成図は以下のようになります。

pkg_hello(フォルダ)
  └Chello.java(ソースファイル)

pkg_main(フォルダ)
  └Cmain.java(ソースファイル)

Javaには以下のようなルールがあるため、
上記のような構成にしてあります。

・1つのファイルには、1つのpublic指定クラスしか記述できない。

・public指定されたクラスがあるファイルのファイル名は、
 ”public指定したクラス名.java” と、しなければならない。

public指定されていないクラスが記述されたファイルのファイル名は
自由に決めてOKです。
しかし、クラス名をファイル名とすると分かりやすくなります。

1ファイルに1クラスの記述をするようにするとキレイな構成になります。

パッケージのネスト

パッケージ内にパッケージを作る事もできます。

これは、フォルダ内にフォルダを作る。
と言う意味と同じです。

もちろん、それぞれのパッケージ内のクラスは別モノとして扱われます。

使用例

パッケージ(フォルダ)構成図

 pkg_A(フォルダ)
  └pkg_B(フォルダ)
    └Chello.java(ソースファイル)

 pkg_main(フォルダ)
   └Cmain.java(ソースファイル)

ファイル名:Chello.java

package pkg_A.pkg_B;

public class Chello {
      void show() {
            System.out.println("Hello");
      }
}

ファイル名:Cmain.java

package pkg_main;

public class Cmain {
      public static void main(String[] args) {
            pkg_A.pkg_B.Chello obj = new pkg_A.pkg_B.Chello();
            obj.show();
      }
}

このプログラムは、
パッケージ pkg_A の中にパッケージ pkg_B を入れた例です。

パッケージが1階層の時と同じようにドットを使って
パッケージ名.パッケージ名.クラス名 のように指定します

パッケージの活用例

パッケージ機能の活用例としては、
佐藤君、鈴木君、田中君の3人で1つの
アプリケーション開発しているとしたら、
それぞれに固有のパッケージを担当させる。

例えば、佐藤君が作る全てプログラムは、
パッケージ:satou内で作るものとする。

以下、鈴木君と田中君も同じようにすれば、
それぞれが作ったプログラムを合わせた時に、
クラス名の衝突がない事がパッケージ機能によって保証されているので、
そのような事を気をする必要がなくなります。

以上、パッケージについての説明でした。