😀

依存性注入(Dependency Injection)を理解する

2023/06/12に公開

依存性注入(Dependency Injection)を理解する

依存性注入とは何か?

依存性注入とは、一つのオブジェクトが別のオブジェクトを活用する際に、そのオブジェクトを外部から供給する手法です。これにより、オブジェクト間の依存関係を解消することが可能となります。

依存性注入の利点

  • テストの容易性が増す
  • オブジェクト間の依存関係が明瞭になる
  • オブジェクトの再利用性が向上する

サンプルコードによる解説

ここでは、CarクラスとEngineクラスが存在する状況を考えます。CarクラスはEngineクラスを用いているため、CarはEngineに依存しているといえます。

依存性注入を適用しないケース

以下の例では、CarクラスのコンストラクタでEngineクラスのインスタンスを生成しています。これにより、Carクラスは特定のEngineクラス(この例ではV8エンジン)に直接依存してしまいます。結果として、柔軟性が失われ、テストや再利用が難しくなります。

class Car {
    private String name;
    private Engine engine;

    public Car(String name) {
        this.name = name;
        this.engine = new Engine("V8");
    }
}

class Engine {
    private String name;

    public Engine(String name) {
        this.name = name;
    }
}

依存性注入を適用するケース

依存性注入を適用した場合、CarクラスのコンストラクタはEngineクラスのインスタンスを引数として受け取り、Carクラスのインスタンス変数に代入します。これにより、Carクラスは特定のEngineクラスに直接依存しない形になります。つまり、Engineクラスの任意の具体的な実装をCarクラスに注入することが可能となります。

class Car {
    private String name;
    private Engine engine;

    public Car(String name, Engine engine) {
      this.name = name;
      this.engine = engine;
    }
}

class Engine {
    private String name;

    public Engine(String name) {
      this.name = name;
    }
}

Discussion