DIとは

概要

DIとは、ソフトウェア開発において
「依存関係」を外部から注入することで、コードの再利用性・保守性・テスト性を高める設計手法です。
特定のクラスやモジュールが、自分で依存するオブジェクト(機能)を作成するのではなく、
外部から渡してもらう(注入される)ように設計します。

正式名称

Dependency Injection(ディペンデンシー・インジェクション)

略称

DI(ディーアイ)

特徴

  • オブジェクト間の依存関係を明確化できる
  • コードの再利用性が向上する
  • テスト時にモック(仮のオブジェクト)を差し替えやすい
  • 密結合(strong coupling)を避けられる
  • 保守・拡張が容易になる
  • 多くのフレームワーク(Spring, Laravelなど)が標準対応

具体例

例:メール送信処理

DIを使わない場合(密結合)

public class UserService {
    private MailService mailService = new MailService(); // 自分でインスタンスを生成

    public void sendWelcomeEmail(String email) {
        mailService.send(email, "Welcome!");
    }
}

DIを使った場合(疎結合)

public class UserService {
    private MailService mailService;

    public UserService(MailService mailService) { // 外から注入
        this.mailService = mailService;
    }

    public void sendWelcomeEmail(String email) {
        mailService.send(email, "Welcome!");
    }
}

関連用語

用語解説
依存性(Dependency)クラスが必要とする外部の機能・オブジェクト
注入(Injection)依存するオブジェクトを外から与える行為
IoC(Inversion of Control)制御の反転。オブジェクトの生成・制御を外部に委ねる設計思想。
DIはこれを実現する手法の1つ
モック(Mock)テストのために用意された、簡易・仮の実装
コンストラクタインジェクションコンストラクタで依存性を渡す方法(最も一般的)
セッターインジェクションセッター(setterメソッド)で依存性を注入する方法
インターフェース実装に依存せず、抽象的に機能を定義する仕組み。DIと相性が良い

タイトルとURLをコピーしました