【かぷせるか】
カプセル化 とは?
💡 内部の仕組みを「カプセルに閉じ込めて」外から触れさせない設計
📌 このページのポイント
- フィールドをprivateにして外部から直接変更できないようにする
- getterとsetterを通じて、検証付きでデータにアクセスする
- 内部実装が変わっても、公開インターフェースが変わらなければ外部への影響がない
- 情報隠蔽ともいう。「何をするか」を公開し「どうやるか」を隠す
カプセル化って何で必要なの?
データを誰でも直接変えられると、不正な値が入ってバグが起きやすいんだ。例えば「年齢」フィールドを直接書けると-100とか入れられる。setterを通じてしか変更できなくすれば、0以上かチェックしてから保存できる。
getterとsetterって何?
publicとprivateって何が違うの?
アクセス修飾子だよ。publicはどこからでもアクセスできる。privateはクラスの内部からしかアクセスできない。protectedは継承した子クラスからはアクセスできる。これを使って「公開する部分」と「隠す部分」を設計するのがカプセル化の実践。
カプセル化と情報隠蔽って同じじゃないの?
似てるけど微妙に違う概念として使われることがある。カプセル化はデータと処理を1つにまとめること全体を指す。情報隠蔽はその中でも「実装の詳細を外部から見えなくする」という側面を指す。どちらの意味で使われているか文脈で判断する必要がある。また「カプセル化すれば情報隠蔽できる」は正しいが「カプセル化したからといって必ずしも隠蔽できているわけではない」という点はオブジェクト指向設計の議論でよく出てくる。
まとめ:ざっくりこれだけ覚えればOK!
カプセル化って出てきたら「内部を隠して決まった方法でしか触れさせない」と思えばだいたいOK!
📖 おまけ:英語の意味
「Encapsulation」 = カプセルに入れること・封じ込め
💬 薬の「カプセル」と同じ語源。中身を包んで外から直接触れられなくする、というイメージ