
Java入門|13章のまとめ
クラスの置き場所を整えるだけで、Javaのプログラムはもっと強く、もっとわかりやすくなる
13章では、これまで学んできたJavaの文法やクラスの使い方を、より大きなプログラムへ広げていくための考え方を学びました。小さなプログラムなら、1つのファイルの中にいくつかのクラスを書いても、それほど困ることはありません。でも、登場するクラスが増え、役割が細かく分かれ、さらに複数人で開発するようになると、それまでの書き方だけでは整理しきれなくなってきます。
そこで大切になるのが、クラスを分けて管理する考え方です。13章では、クラスを別ファイルに分ける方法、パッケージで分類する方法、別パッケージのクラスを使う方法、import によって書き方をすっきりさせる方法、さらにサブパッケージやクラスライブラリとの関係まで学びました。
ドラゴンボールでたとえるなら、登場人物が増えてきたときに、悟空、ベジータ、ピッコロ、悟飯たちが全員同じ場所で無秩序に動いていたら、誰が何をしているのか見えにくくなってしまいますよね。そこで、戦士ごとの役割、修行の場、技の系統、所属チームを整理すると、物語がぐっとわかりやすくなります。Javaのクラス整理も、それととてもよく似ています。13章は、そうした大きなプログラムを整然と構築するための土台を身につける章でした。
13章で学んだことの全体像
13章で扱った内容を大きく整理すると、次のようになります。
| テーマ | 学んだこと |
|---|---|
| ファイルの分割 | クラスを別ファイルに分けて管理する |
| パッケージ | クラスをグループにまとめて整理する |
| 同じパッケージの利用 | 同じグループ内のクラスを自然に使う |
| 異なるパッケージの利用 | public と パッケージ名.クラス名 で別グループのクラスを使う |
| import | 別パッケージのクラスを簡単に使う |
| サブパッケージ | パッケージを階層化してさらに整理する |
| クラスライブラリとの関係 | 標準ライブラリもパッケージで整理されていることを理解する |
| モジュール | パッケージより上位の整理の考え方を知る |
13章は、文法を新しく大量に覚える章というより、クラスをどう整理し、どう使い分けるかを学ぶ章だったと言えます。
クラスをファイルに分ける意味
クラスが増えてきたら、まず必要になるのがファイルの分割です。
クラスごとにファイルを分けることで、役割がはっきりし、修正箇所も見つけやすくなります。
ドラゴンボールで考えると、悟空の設定資料、ベジータの設定資料、ピッコロの設定資料が、全部1枚の紙にびっしり書かれていたらとても読みづらいですよね。戦士ごとに資料を分けておけば、必要な情報をすぐ確認できます。Javaでも同じで、クラスごとにファイルを分けることで、プログラムの見通しがよくなります。
| 分けない場合 | 分けた場合 |
|---|---|
| クラスの役割が混ざりやすい | クラスごとの責任が明確になる |
| 修正箇所を探しにくい | 必要なファイルをすぐ開ける |
| 複数人で作業しにくい | 分担しやすい |
この考え方は、大規模な開発ではほぼ必須です。
つまり、ファイル分割は読みやすさのためでもあり、開発しやすさのためでもあります。
パッケージはクラスの所属チームのようなもの
ファイルを分けるだけでも整理しやすくなりますが、それだけではまだ十分ではありません。
関連するクラスをさらにグループとして整理するために使うのがパッケージです。
ドラゴンボールでたとえるなら、クラスはそれぞれの戦士、パッケージはその戦士たちの所属チームのようなものです。たとえば、
- 戦士クラスの集まり
- 修行関連クラスの集まり
- 対戦管理クラスの集まり
というように、役割ごとにチーム分けするイメージです。
パッケージを使うと、同じ名前のクラスがあっても区別しやすくなります。
これは、大規模なプログラムでとても大切です。
| 整理方法 | 意味 |
|---|---|
| ファイル | クラス単位の整理 |
| パッケージ | クラス群の整理 |
| パッケージ名.クラス名 | クラスの正式な所属を含めた名前 |
つまり、クラス名だけではなく、どのパッケージに属するクラスなのかまで意識することで、Javaの整理力は大きく高まります。
同じパッケージのクラスは連携しやすい
同じパッケージに含まれるクラスどうしは、比較的自然に利用できます。
これは、同じチームに所属している戦士どうしが連携しやすいのに似ています。
たとえば、戦士の情報を表すクラスと、その戦士を使って処理を進めるクラスが同じパッケージにあれば、利用側はあまりパッケージを意識せずに書きやすくなります。
ここで大事なのは、同じパッケージにいるクラスは、同じ分類の仲間として扱われるという感覚です。
13章では、このことがパッケージの基本としてとても重要でした。
異なるパッケージのクラスはそのままでは使えない
同じパッケージのクラスは使いやすい一方で、別のパッケージにあるクラスを使うときには少し注意が必要になります。
異なるパッケージにあるクラスは、そのまま単純にクラス名だけで使うことはできません。
ドラゴンボールでたとえると、別の組織や別の宇宙の戦士に連絡を取るようなものです。名前だけ呼んでも相手が誰なのかわかりにくいので、所属まで含めてはっきり示す必要があります。
そのために必要だったのが次の2つでした。
| 必要なこと | 理由 |
|---|---|
| 利用されるクラスを public にする | 別パッケージから使えるようにするため |
| 利用するときに パッケージ名.クラス名 と書く | どこのクラスなのか明示するため |
この2つがそろって、はじめて異なるパッケージのクラスを安全に使えるようになります。
public の意味をクラスの公開範囲として理解する
13章では、public の意味も改めて重要になりました。
クラスに public をつけると、そのクラスは別のパッケージからも利用できるようになります。
反対に、public をつけないクラスは、同じパッケージの中で使うことを前提にしたクラスです。
これはドラゴンボールでいうなら、世界に向けて公開されている大会の情報なのか、それとも特定のチーム内だけで共有されている作戦資料なのか、という違いに近いです。公開されているものなら外から使えますが、内部用のものは外からそのまま使えません。
import は別チームの戦士を呼びやすくする仕組み
異なるパッケージのクラスを使うとき、毎回 パッケージ名.クラス名 と書くのは少し大変です。
そこで役立つのが import です。
import を使うと、ファイルの先頭で「このクラスを使います」と宣言しておけるので、そのあとはクラス名だけで書けるようになります。
ドラゴンボールでたとえるなら、別の場所にいる戦士に毎回正式な所属名つきで呼びかけるのではなく、最初にチーム登録しておいて、その後は短く呼べるようにする感じです。
| 書き方 | 特徴 |
|---|---|
| パッケージ名.クラス名 | 明確だが長い |
| import して クラス名だけ | 短くて読みやすい |
import は、Javaのコードをぐっと読みやすくしてくれる大切な仕組みです。
パッケージは階層に分けられる
クラスがさらに増えてくると、1つのパッケージの中だけでも分類しきれなくなります。
そこで使うのがサブパッケージです。
たとえば pa というパッケージの下に sub という分類を作れば、pa.sub という形で階層を表現できます。
これは、チームの中をさらに部門ごとに分けるようなものです。
ドラゴンボールで考えるなら、
- 戦士全体のグループ
- その中の修行担当
- その中の対戦担当
というふうに、まとまりの中にさらに細かいまとまりを作るイメージです。
ただし、とても大事なのは、上位パッケージとサブパッケージは別パッケージとして扱われるという点です。
| 名前 | コード上の扱い |
|---|---|
| pa | 1つの独立したパッケージ |
| pa.sub | これも別の独立したパッケージ |
名前がつながっていても、同じパッケージではないという点は、13章の中でも大切なポイントでした。
パッケージは名前空間として働く
13章では、パッケージが名前空間として働くことも学びました。
これは、同じクラス名でも、所属パッケージが違えば別のクラスとして区別できるということです。
ドラゴンボールでたとえるなら、同じ「悟飯」という名前でも、もし別の宇宙や別の時代に同名のキャラクターがいたとしても、所属を含めて呼べば区別できる、という感覚です。
Javaでは、クラス名だけでなくパッケージ名を含めることで、同名のクラスがあっても混乱しにくくなっています。これは大規模開発でとても重要です。
クラスライブラリもパッケージで整理されている
Javaが最初から用意しているクラスライブラリも、やはりパッケージで分類されています。
これまで使ってきた String なども、その整理の一部でした。
特に大事なのは、標準クラスライブラリのクラスも、自分で作るクラスと同じようにパッケージで整理され、必要に応じて import して使うということです。
よく使う代表的なパッケージをまとめると、次のようになります。
| パッケージ名 | 主な役割 |
|---|---|
| java.lang | 基本機能 |
| java.io | 入出力 |
| java.net | ネットワーク |
| java.util | 便利な補助機能 |
| java.math | 数値計算 |
| java.text | 書式や国際化 |
| java.awt | 画面部品 |
| java.awt.event | イベント処理 |
| java.awt.image | 画像処理関連 |
ここで特に覚えておきたいのは、java.lang は特別で、通常は import なしで使えるということです。
String をそのまま書けたのはそのためでした。
* を使った import の意味
同じパッケージのクラスをいくつも使うときは、1つずつ import を書くのが大変になります。
そのときに使えるのが、アスタリスクを使った書き方です。
これは、同じパッケージ内のクラスをまとめて使いやすくするためのものです。
ただし、サブパッケージまでまとめて取り込めるわけではありません。
この点は、サブパッケージが独立した別パッケージだと理解していれば納得しやすいです。
モジュールはパッケージより上の整理単位
13章の最後では、Java 9 以降に登場したモジュールにも少し触れました。
モジュールは、パッケージよりさらに大きな整理単位です。
クラスが集まってパッケージになり、パッケージがさらにまとまってモジュールになる、と考えるとイメージしやすいです。
| 単位 | 役割 |
|---|---|
| クラス | 実際の処理をもつ部品 |
| パッケージ | クラスを整理する単位 |
| モジュール | パッケージ群の公開範囲や依存関係を整理する単位 |
モジュールの理解はこの先さらに深めていく内容ですが、13章では「Javaにはパッケージのさらに上の整理方法もある」ということを知るのが大切でした。
13章全体をドラゴンボールで見直すと
ここまでの内容をドラゴンボールにたとえて整理すると、13章はこんな章だったと言えます。
| Javaの考え方 | ドラゴンボール風のたとえ |
|---|---|
| クラス | 戦士や技、修行方法などの1つ1つの設定 |
| ファイル分割 | 戦士ごとに設定資料を分ける |
| パッケージ | 戦士たちの所属チームや分類 |
| 同じパッケージ | 同じチーム内の仲間 |
| 異なるパッケージ | 別の組織や別のチーム |
| import | 別チームの戦士を呼びやすくする準備 |
| サブパッケージ | チームの中をさらに部門分けする |
| 名前空間 | 同じ名前でも所属で区別する仕組み |
| モジュール | チーム群全体を管理する大きな枠組み |
こうして見ると、13章は単に文法を学ぶ章ではなく、登場人物が増えても混乱しないように世界を整理する章だったことがよくわかります。
13章で身についた力
13章を学んだことで、Javaのコードをただ書くだけではなく、どう整理して育てていくかという視点が身につきました。
この力は、プログラムが大きくなるほど大切になります。
13章で特に身につけた力を整理すると、次のようになります。
| 身についた力 | 内容 |
|---|---|
| クラスを役割ごとに分ける力 | ファイル分割の考え方 |
| クラスの所属を整理する力 | パッケージの理解 |
| 別グループのクラスを使う力 | public と パッケージ名つき記述 |
| コードを読みやすくする力 | import の活用 |
| 大規模開発を見通す力 | サブパッケージとモジュールの理解 |
この章で学んだことは、今後のJava学習の土台になります。
オブジェクト指向の部品をどう作るかだけでなく、その部品をどう配置し、どう管理するかまで考えられるようになったことが、13章の大きな成果です。

この図は、左側に個々のクラスがあり、それぞれが独立した部品であることを表しています。戦士をイメージした記号を添えることで、ドラゴンボールの世界観と結びつけながら、クラスがそれぞれ異なる役割を持つ存在であることを示しています。
中央の大きな箱はパッケージで、複数のクラスが同じグループに整理される様子を示しています。その下に配置したサブパッケージは、さらに細かく分類できることを表しています。右側の import の矢印は、別パッケージのクラスを使う流れを示しています。
Javaでは自分で作るクラスだけでなく、標準ライブラリやさらに上位の整理単位まで含めて、全体が階層的に整理されています。この図を通して、13章が扱った内容全体を一つの流れとして、つかんでみましょう。
