【かぷせるか】

カプセル化 とは?

最終更新:
💡 状態と処理をまとめ、触れる入口を設計する

オブジェクトの状態と処理をまとめ、外部に公開する操作を設計すること。内部のデータを直接変更させず、決めた窓口で値の検証などを行えるようにする。

📌 このページのポイント
カプセル化:状態と操作をまとめる Userクラス 内部の状態 private age = 12 検証してから変更 公開する操作 setAge(value) アプリ 利用側 呼び出す 例:負の年齢なら、変更を拒否 使う側は公開された操作に従う
年齢を0以上か検証する例です。公開する操作や条件は設計によって異なり、すべてのデータにsetterが必要なわけではありません。
ひよこ ひよこ
カプセル化って何で必要なの?
ペンギン先生 ペンギン先生
データを誰でも直接変えられると、不正な状態を作りやすいからだよ。例えば年齢を直接書き換えられると、-100という値も入れられる。変更の窓口を用意して0以上か検証すれば、その操作から不正な値が入るのを防げるんだ。
ひよこ ひよこ
getterとsetterって何?
ペンギン先生 ペンギン先生
値を読む操作がgetter、設定する操作がsetterだよ。例えばgetAge()で読み、setAge(value)で設定する。ただしsetterを作っただけで検証されるわけではない。値をそのまま代入するだけなら、不正な値も通ってしまうんだ。
ひよこ ひよこ
全部のデータにgetterとsetterを作ればいい?
ペンギン先生 ペンギン先生
必要な操作だけ公開しよう。読めるけれど外から変更できないプロパティも作れるし、残高を直接設定する代わりに入金・出金という操作を用意する設計もある。外にどんな操作を許すかが大切で、すべてに読み書きの入口を作る必要はないよ。
ひよこ ひよこ
内部を変えても、使う側は何も直さなくていい?
ペンギン先生 ペンギン先生
実装を隠す情報隠蔽は、変更の影響を抑える助けになるよ。でも公開メソッドの名前が同じでも、返す値の意味やエラーの条件が変われば使う側に影響する。公開する形だけでなく、約束した動作を保てているかも確認するんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「カプセル化」って出てきたら「状態と処理をまとめ、決めた窓口で扱えるようにする設計」と思えればだいたいOK!
📖 おまけ:英語の意味
「Encapsulation」 = カプセルに入れること・封じ込め
💬 薬のカプセルが中身を包むように、内部の状態を包み、外に公開する操作を決めるイメージだよ

参考資料

← 用語集にもどる