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