**デメテルの法則(Law of Demeter)**とは、オブジェクト指向設計における原則の一つで、「最小知識の原則(Principle of Least Knowledge)」とも呼ばれます。コードの結合度を下げ、保守性や再利用性を高めるための指針です。

🔑 要点

オブジェクトが知っている(アクセスできる)のは、以下の範囲だけに限定すべきという考え方です。

• 自分自身のメソッド

• 自分が持っているオブジェクト(属性・プロパティなど)

• メソッドに渡された引数

• 自分自身が生成したオブジェクト

つまり、

「オブジェクトは、自分と直接関係する相手とだけ会話すべき」

ということです。

🚩 具体例(悪い例)

// 良くない例
person.getWallet().getMoney().withdraw(1000);

• person が wallet を呼び出し、その先の money にアクセスしている。

• 深く連鎖していて、複数のオブジェクトが結合しすぎている。

✅ 具体例(良い例)

// 改善された例
person.withdrawFromWallet(1000);

• person は自分が直接管理する範囲だけに働きかける。

• 内部で何が起きているか(wallet, money)は隠蔽されている。

💡 メリット

• クラス間の結合度が下がり、独立性・再利用性が向上する。

• コードの変更が限定的になり、保守性が向上する

⚠️ デメリット・注意点

• 徹底しすぎるとメソッドの数が増える(手間が増える場合もある)。

• 極端に適用しすぎると、逆にコードが読みにくくなることもあるため、適切なバランスが必要。

📌 一言でまとめると

『知らなくていいことは知らない』を徹底する原則

です。