Composition over Inheritance(継承よりコンポジション)とは?柔軟で保守性の高い設計を実現する原則を徹底解説
オブジェクト指向設計では、コード再利用や共通機能の整理を目的として、継承が長く利用されてきました。親クラスに共通処理を定義し、子クラスがそれを引き継ぐことで、似たようなクラスを効率よく実装できるためです。特に、明確な親子関係があるモデルでは、継承は分かりやすく強力な仕組みとして機能します。
しかし、継承を多用すると、クラス階層が複雑になり、親クラスの変更が多くの子クラスへ影響する問題が発生しやすくなります。また、コード再利用だけを目的に不自然な継承関係を作ると、リスコフの置換原則に違反したり、不要な機能まで子クラスが引き継いだりすることがあります。こうした問題を避ける考え方として重視されるのが、Composition over Inheritance(継承よりコンポジション)です。
Composition over Inheritanceは、継承を完全に否定する原則ではありません。むしろ、継承を使う前に、オブジェクトを組み合わせるコンポジションで実現できないかを検討する設計方針です。コンポジションを使えば、機能を部品として分離し、必要な振る舞いを柔軟に組み合わせられるため、保守性や拡張性の高い設計を作りやすくなります。
EN
JP
KR