【かぷせるか】

カプセル化 とは?

💡 内部の仕組みを「カプセルに閉じ込めて」外から触れさせない設計
📌 このページのポイント
カプセル化(Encapsulation) User クラス private(非公開) - name: string - email: string public(公開) + getName(): string + setEmail(e: string): void 外部コード OK 直接アクセス禁止 非公開フィールド 公開メソッド メソッドを通じてのみデータにアクセスできる
カプセル化の仕組み
ひよこ ひよこ

カプセル化って何で必要なの?

ペンギン先生 ペンギン先生

データを誰でも直接変えられると、不正な値が入ってバグが起きやすいんだ。例えば「年齢」フィールドを直接書けると-100とか入れられる。setterを通じてしか変更できなくすれば、0以上かチェックしてから保存できる。

ひよこ ひよこ

getterとsetterって何?

ペンギン先生 ペンギン先生

privateなフィールドを外から読む・書くための公開メソッドだよ。「getAge()」「setAge(value)」のように。setterの中でバリデーション処理を入れれば、不正な値の設定を防げる。

ひよこ ひよこ

publicとprivateって何が違うの?

ペンギン先生 ペンギン先生

アクセス修飾子だよ。publicはどこからでもアクセスできる。privateはクラスの内部からしかアクセスできない。protectedは継承した子クラスからはアクセスできる。これを使って「公開する部分」と「隠す部分」を設計するのがカプセル化の実践。

ひよこ ひよこ

カプセル化と情報隠蔽って同じじゃないの?

ペンギン先生 ペンギン先生

似てるけど微妙に違う概念として使われることがある。カプセル化はデータと処理を1つにまとめること全体を指す。情報隠蔽はその中でも「実装の詳細を外部から見えなくする」という側面を指す。どちらの意味で使われているか文脈で判断する必要がある。また「カプセル化すれば情報隠蔽できる」は正しいが「カプセル化したからといって必ずしも隠蔽できているわけではない」という点はオブジェクト指向設計の議論でよく出てくる。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
カプセル化って出てきたら「内部を隠して決まった方法でしか触れさせない」と思えばだいたいOK!
📖 おまけ:英語の意味
「Encapsulation」 = カプセルに入れること・封じ込め
💬 薬の「カプセル」と同じ語源。中身を包んで外から直接触れられなくする、というイメージ
← 用語集にもどる