Javaの基本文法のうち、パッケージについて説明します。
パッケージは必ず利用することが推奨されています。
目次
パッケージとは?
JavaのコードでArrayListを使いたい場合、「java.util.ArrayList」というものをimportしていたと思います。
import java.util.ArrayList;
本当はArrayListというクラスを利用したいはずなのに、「java.util」という余計な情報まで付与されていました。
実はこれがパッケージです。
パッケージはどんな場合に使うのか?
以下の問いの答えがパッケージを使う目的です。
- ライブラリとして提供されているクラス名と同名のクラスを作成したい場合どうすればよいか?
- 自分が作成するアプリケーション内で同名のクラスを作成したい場合どうすればよいか?
例えば、Javaの標準APIでもたくさんのクラスが提供されていますし、その他ライブラリも利用する場合もあるでしょう。もしパッケージがなければ貴方が作成するアプリケーションでは同じクラス名は利用できなくなります。
その場合どうしますか?
『MyAppSample1.java』のようにクラス名にアプリケーション名をつけますか?
名は体を表すようにクラス名をつけることが推奨されていますのであまりよい方法とはいえません。
そこで登場するのがパッケージです。
パッケージ「aaa」と「bbb」にそれぞれ「Sample」というクラスを作ることが出来ます。
イメージとしてはフォルダと同じです。
これで同じクラス名を別物として扱うことが出来ます。
ちなみに、パッケージは日本語で名前空間と呼ばれます。日本語にするとなんとなく難しいのですが、要はパッケージ名の「空間」ができ、その空間にクラスを保持することで別物として扱うことが出来ることを示しています。
パッケージの作り方
パッケージを作るにはクラスの先頭に「package パッケージ名」を指定します。
パッケージ指定のサンプルコード
package com.ittoybox.sample.main; public class PackageSample { public static void main (String[] args) { ・・・省略・・・ } }
パッケージの命名規則
Javaのコーディング作法としては以下のルールーに則りパッケージ名を決定します。
- 貴方のサイトのドメインを逆さにする
- アプリケーション名をつける
- クラスの目的に応じたパッケージ名をつける
「貴方のサイトのドメインを逆さにする」の解説
たとえば本サイトであれば「ittoybox.com」なので「com.ittoybox」になります。サイトを保有していないとパッケージ名がつけられないのか!?と言うとそうとも限りません。
要は世界中の人とパッケージ名が被らないルールとして『ドメイン名』を使うこととしていますが、公開しないライブラリであれば任意の名称をつけて構わないでしょう。
「アプリケーション名をつける」の解説
貴方が生涯1つのアプリケーションしか作成しないのであればドメイン名を逆さまにするだけで問題ありません。しかし複数のアプリケーションを作る可能性があります。そこでアプリケーション名をつけることによりクラス名の重複を避けることができます。
「クラスの目的に応じたパッケージ名をつける」の解説
自分が作成するアプリの中でも同名のクラスを使いたい場合が出てくると思います。また、1つのパッケージにたくさんのクラスがあると管理しにくいです。そこで1階層(必要であれば複数の階層)パッケージを作成するということです。
サンプルコードでは「com.ittoybox.sample.main」としてましたので「main」というパッケージを作成したことになります。
なぜ「main」にしたかというとmainメソッドを実行するためのクラスだからです。
※名称は任意です。
そのクラスが持つ役割ごとに役割に応じたパッケージ名をつければよいでしょう。利用するフレームワーク等にもよりますが一般的に利用されるパッケージ名は以下のようなものがあります。
パッケージ名 | 意味 |
---|---|
main | mainメソッドがあるクラス |
dto | Data Transfer Object データを保持するクラス |
util | 各種ユーティリティクラス |
dao | Data Access Object データ(DB等)へアクセスするクラス |
これはほんの1例です。特に規則はありませんので貴方がアプリケーションを作成するときにルールを決めてください。
パッケージ指定したクラスの呼び出し
これはすでに説明不要でしょう。
パッケージ名 + クラス名でimport
一般的にはこちらを使います。
import java.util.ArrayList;
パッケージ名 + クラス名で宣言
同一クラスでパッケージが異なるクラスを両方利用したい場合に利用します。
java.util.Date date1 = new java.util.Date(); java.sql.Date date2 = new java.sql.Date();
例えば、Dateクラス。
「java.util.Date」と「java.sql.Date」が2つあり、どちらも利用したいケースが稀に発生します。
import java.util.Date; import java.sql.Date; ・・・省略・・・ Date date = new Date(); //←どちらのパッケージのDateクラスか分からない
こういったレアケースにパッケージ名 + クラス名でクラスを宣言する方式を利用します。
コメント
[…] パッケージの名前はJavaで使う命名規則なのですが、基本的には個人レベルの場合、適当でOK。 […]