依存性注入 【DI】 Dependency Injection

概要

依存性注入(DI)とは、コンピュータプログラムデザインパターンの一つで、オブジェクトなどの間に生じる依存関係オブジェクト内のコードに直接記述せず、外部から何らかの形で与えるようにする手法。

あるオブジェクトAがオブジェクトBを呼び出してその機能を利用する場合「AはBに依存している」という。この関係を素朴に記述しようとすると、Aの内部でBを生成して呼び出すコードを記述する形となる。AとBの関係は固定的になり、AがBを利用していることは外部からは分かりにくくなる。

依存性注入を利用する場合、Aのコードの中でBを生成するコードを直に記述することはせずに、Bをメソッド引数などの形で外部から受け取って呼び出す形とし、Aを呼び出す側がB(に相当するオブジェクト)を与えて利用させる。

これにより、AとBの依存関係は外部から任意に指定・変更できるようになり、Bの代わりに同じインターフェース実装したB'を与えたり、Bのように振る舞うモックを与えてAのみを対象とする単体テストったりすることができる。

依存性注入では、オブジェクトAにあたる、依存『する』側のことを「クライアント」、オブジェクトBにあたる、依存『される』側を「サービス」と呼ぶことがある。注入をどのようにうかは様々な方式があり、サービスクライアントコンストラクタ引数として渡す「コンストラクタインジェクション」(コンストラクタ注入)、setterメソッドを用いる「セッターインジェクション」(setter注入)などがよく知られている。

Webアプリケーションフレームワークなどの中には「DIコンテナ」と呼ばれる専用のツールを備えたものがある。これを利用すれば依存性に関する情報を外部の設定ファイルなどに記述して実行時に解釈させることができ、依存性に関する記述をプログラム本体から切り離すことができる。

(2018.12.30更新)

他の辞典による解説 (外部サイト)

この記事の著者 : (株)インセプト IT用語辞典 e-Words 編集部
1997年8月より「IT用語辞典 e-Words」を執筆・編集しています。累計公開記事数は1万ページ以上、累計サイト訪問者数は1億人以上です。学術論文や官公庁の資料などへも多数の記事が引用・参照されています。
ホーム画面への追加方法
1.ブラウザの 共有ボタンのアイコン 共有ボタンをタップ
2.メニューの「ホーム画面に追加」をタップ
閉じる