依存性注入とは?
いぞんせいちゅうにゅう
依存性注入とは、オブジェクトが必要とする依存コンポーネントを外部から渡す設計手法で、コードの疎結合化とテスト容易性の向上を目的とします。
依存性注入(Dependency Injection、DI)とは、あるオブジェクトが依存する別のオブジェクト(依存物)を、そのオブジェクト自身が内部で生成するのではなく、外部から渡す(注入する)設計パターンです。ソフトウェア設計の原則のひとつである「依存性逆転の原則」を実現するための代表的な手法です。
通常、クラスが別のクラスのインスタンスを直接生成すると、両者が強く結びついてしまい(密結合)、一方を変更すると他方にも影響が及びます。依存性注入では、依存するオブジェクトをコンストラクタや設定メソッドを通じて外部から供給することで、この密結合を解消します。
注入の方式には主に3種類があります。
- コンストラクタ注入:クラスのコンストラクタ引数として依存物を渡す最も一般的な方式
- セッター注入:setter メソッドを通じて後から依存物を設定する方式
- インターフェース注入:依存物を受け取るインターフェースを実装させる方式
依存性注入の意義は大きく2点あります。第一にテスト容易性の向上で、本番環境の依存物をモックやスタブに差し替えることが容易になります。第二に再利用性と保守性の向上で、依存関係が明示的になるためコードの見通しが良くなります。SpringやLaravelなどの現代的なフレームワークはDIコンテナを内蔵し、依存関係の管理を自動化しています。
使い方・例文
ユーザー登録機能を実装する際、メール送信クラスをコントローラー内部で直接生成する代わりに、コンストラクタ引数として注入することで、テスト時にはダミーのメール送信クラスに差し替えられるようになります。
この用語をシェア
最終更新: