Java の package (パッケージ) とは?
Java のパッケージは「あるアプリケーションに関連するクラスやインターフェイスを整理するための名前空間である」ということができます。
具体的には開発者がディレクトリにファイルを整理していくので、フォルダーの構造・構成がパッケージのそれと同様になります。
Java の標準ライブラリーにも多数のパッケージが含まれています。
java.lang、java.util とかそうした階層を目にしたことがあるかもしれませんが、そうした名前はパッケージの名前です。
Java のスタンダードライブラリは java (または javax) のパッケージ階層の中に全て含まれます。
パッケージを導入する目的はクラス名の一意性を確保するためのものです。
A さんが開発した XYZ クラスと、B さんが開発した XYZ クラスは通常別物です。
これを同時に利用する場合は、A さん、B さんそれぞれの XYZ であるという意味で a.XYZ、b.XYZ のように整理できたら区別できますよね。
世界中で利用することを考えると、世界中で一意になる名前をパッケージ名に付けられたら都合がよいわけですが、そうした「一意になる名前」として、 ドメイン名が利用されます。
ドメイン名 CompanyA.com を使う会社が開発したコードを com.CompanyA 名前空間以下に整理、ドメイン名 CompanyB.com の会社のものを com.CompanyB 名前空間以下に整理します。
すると、必要に応じて com.companya.utils.db、com.companya.utils.authenticate ・・・のように独自に名前の干渉をすること無しに拡張していけます。