TL;DR

依存関係(dependency)とは、あるコードが単独では理解も変更もできない関係のこと。そのコードを変更するときは、関係する他のコードも考慮し、変更する必要がある。A Philosophy of Software Design では、不明瞭と並ぶ複雑さの原因とされている。

なぜ必要か

依存関係は、変更差分の増大と認知的負荷をもたらす。1 つの変更のために多くの場所を直す必要が生まれ、作業に必要な知識も増える。

英語版 Wikipedia によると、ソフトウェア工学では、モジュールどうしが互いに依存する度合いを結合度と呼ぶ。結合が強いと、あるモジュールの変更が他のモジュールに波及しやすい。モジュールどうしの依存が増えるので、組み立てにかかる手間も増え、依存先のモジュールも一緒に必要になるので、再利用やテストもしにくくなる。

例

クライアントとサーバの関係がその例である。クライアント(送信側)のコードを変更すると、サーバ(受信側)のコードも変更する必要がある。

注意点

依存関係は完全には排除できない。ソフトウェアの設計では、依存関係の数を減らし、残った依存関係をできるだけ単純で明白なものにすることを目標とする。

関連

出典