【Java】パッケージメモ ( 名前空間の中にあるクラスをまとめる )

# パッケージ
パッケージについて学んだことのメモです。
Eclipse上でパッケージの作成をする際は過去に書いた記事があります。
[【Eclipse】Javaのパッケージの作成方法](https://qiita.com/takahirocook/items/63ae65eb75adba272a33)
## パッケージとは

パッケージとは「 ~~.class ファイル 」の集まりでを示す言葉で、「 **大量の[クラス]を整理するための仕組み** 」です。

パッケージを使う目的は以下です。

- **名前空間を提供し、名前の衝突を避ける**
- **アクセス制御機能を提供する**
- **クラスの分類を可能にする**


## パッケージの概念

### デフォルトパッケージ
Javaはその仕様上、クラス「 ~~.class ファイル 」ファイルを必ずどこかのパッケージに収める必要があります。
その為、パッケージを明示していない（いままでのような）クラス「 ~~.class ファイル 」ファイルは
「デフォルトパッケージ」という形で取り扱っています。

### 名前空間

「 **名前空間** 」 とは「 対象のものを指定した名称で確実に識別・特定するめの概念 」です。

つまりは、「どんなクラスか？」みたいな、形容詞的なものです。

### パッケージ

上記の 「 名前空間 」はパッケージと言う概念そのもので、
パッケージとは、**名前空間の中にあるクラスをまとめる仕組みです。**

身近な例えでいうと 自分のパソコンやスマホの中にある大量の画像ファイルの中から、目当ての画像ファイルを探すとなると非常に大変で時間がかかります。同じ「画像ファイル」でも

- 家族の写真
- 仕事の写真
- ペットの写真
- 旅行の写真
- 料理の写真

といった、同じカテゴリーのなかでクラスがいっぱいあったとしても、特定するのが容易になります。

## パッケージ化のメリット

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

大量に増えた 「 ~~.class ファイル 」を目的や機能ごとに整理しておくと、目的ごとに使いやすくなり、クラスの管理も容易になります。

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

数多くクラスを作ると **クラス名が重複することがあります** 。
その場合、 **クラス名は同名でもパッケージ名で区別することが可能** です。

パッケージが違うと、同じクラス名のクラスでも別クラスとなるため、コンパイラやJVMは名前が違っても、意図したクラスを判断してつかってくれる。

またこれにより、クラス（.class）ファイルは「パッケージ名＋ファイル名」のように
名前空間（Namespace）が与えられて、名前の一意性も高まります。

## パッケージの指定方法

結論このように書きます。
以下のコードを、パッケージに含めるソースの先頭部分に記述します。

```
package パッケージ名; 
```

<font color="Red">**※ import がある場合でも、パッケージ宣言はソースコードの先頭行に記述すること！**</font>

```java
package jp.co.xxx; //importより先に記述する。
import example.hogehoge;

public class Hello(){
  System.out.println("hello world!");
}
```

## パッケージ内のクラス、[インターフェース]の呼び出し

パッケージ内[インターフェース]の呼び出しはこちら

```
パッケージ名.インタフェース名
```
パッケージ内[クラス]の呼び出しはこちら

```
パッケージ名.クラス名
```

[インスタンス]:https://qiita.com/takahirocook/items/ec01cdcbb440cf0d1cc4
[インスタンス化]:https://qiita.com/takahirocook/items/ec01cdcbb440cf0d1cc4
[アクセス修飾子]:https://qiita.com/takahirocook/items/e51b0b9d37d95ad587fe
[フィールド]:https://qiita.com/takahirocook/items/28df75a133049a74ece1
[フィールド変数]:https://qiita.com/takahirocook/items/28df75a133049a74ece1
[new演算子]:https://qiita.com/takahirocook/items/00f9f97592bf50831d39
[カプセル化]:https://qiita.com/takahirocook/items/e469a7c0539a0012868e
[クラス]:https://qiita.com/takahirocook/items/50cbbdca8e21539170e9
[メソッド]:https://qiita.com/takahirocook/items/5bfe43576d87a2a4006c
[mainメソッド]:https://qiita.com/takahirocook/items/f4635915337303de338c
[メソッドの呼び出し]:https://qiita.com/takahirocook/items/f4635915337303de338c
[コンストラクタ]:https://qiita.com/takahirocook/items/fa1822f2f22c3786593e
[引数]:https://qiita.com/takahirocook/items/5e5b0ba79e869f4a592e
[戻り値]:https://qiita.com/takahirocook/items/3b6fa670a1d6dd4a9386
[this]:https://qiita.com/takahirocook/items/d251ec4693c68f6b9538
[getter・setter]:https://qiita.com/takahirocook/items/27828bc8477735612021
[setter]:https://qiita.com/takahirocook/items/27828bc8477735612021
[getter]:https://qiita.com/takahirocook/items/27828bc8477735612021
[オブジェクト指向]:https://qiita.com/takahirocook/items/041ba7a096b71ab8ffd4
[継承]:https://qiita.com/takahirocook/items/6c84ea66a6e2ad536a37
[オーバーライド]:https://qiita.com/takahirocook/items/09dd8e5f56d6617ce45a
[オーバーロード]:https://qiita.com/takahirocook/items/b937c3c07126fe7e02a4
[this]:https://qiita.com/takahirocook/items/d251ec4693c68f6b9538
[super]:https://qiita.com/takahirocook/items/75a07131e7e791c8442c
[スーパークラス]:https://qiita.com/takahirocook/items/75a07131e7e791c8442c
[final]:https://qiita.com/takahirocook/items/5e0916d9bf28bcf68d0c
[final修飾子]:https://qiita.com/takahirocook/items/5e0916d9bf28bcf68d0c
[定数]:https://qiita.com/takahirocook/items/5e0916d9bf28bcf68d0c
[static修飾子]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[static]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[インスタンスフィールド]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[インスタンス変数]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[動的メソッド]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[インスタンス変数]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[静的メソッド]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[クラスメソッド]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[静的メソッド]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[クラスフィールド]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[クラス変数]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[静的変数]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[インターフェイス]:https://qiita.com/takahirocook/items/ca84be8dfef664b19194
[インターフェース]:https://qiita.com/takahirocook/items/ca84be8dfef664b19194