**デメテルの法則(Law of Demeter)**とは、オブジェクト指向設計における原則の一つで、「最小知識の原則(Principle of Least Knowledge)」とも呼ばれます。コードの結合度を下げ、保守性や再利用性を高めるための指針です。
🔑 要点
オブジェクトが知っている(アクセスできる)のは、以下の範囲だけに限定すべきという考え方です。
• 自分自身のメソッド
• 自分が持っているオブジェクト(属性・プロパティなど)
• メソッドに渡された引数
• 自分自身が生成したオブジェクト
つまり、
「オブジェクトは、自分と直接関係する相手とだけ会話すべき」
ということです。
🚩 具体例(悪い例)
// 良くない例
person.getWallet().getMoney().withdraw(1000);
• person が wallet を呼び出し、その先の money にアクセスしている。
• 深く連鎖していて、複数のオブジェクトが結合しすぎている。
✅ 具体例(良い例)
// 改善された例
person.withdrawFromWallet(1000);
• person は自分が直接管理する範囲だけに働きかける。
• 内部で何が起きているか(wallet, money)は隠蔽されている。
💡 メリット
• クラス間の結合度が下がり、独立性・再利用性が向上する。
• コードの変更が限定的になり、保守性が向上する。
⚠️ デメリット・注意点
• 徹底しすぎるとメソッドの数が増える(手間が増える場合もある)。
• 極端に適用しすぎると、逆にコードが読みにくくなることもあるため、適切なバランスが必要。
📌 一言でまとめると
『知らなくていいことは知らない』を徹底する原則
です。