[面接の質問] 依存性注入
DIに関する面接の質問まとめ
依存性注入
依存性:あるオブジェクトが別のオブジェクトを利用している関係 → 依存性注入:その関係を設定すること
依存性注入が必要な理由?
public class Product {
private Apple apple;
public Product() {
this.apple = new Apple();
}
}
このように例を見てみると、ProductというクラスがAppleのコンストラクタを使用している場合、別途注入を受けずにそのまま使用している。 Productを使用する場合、Appleがそのまま付随してくる依存関係として理解できる。 こうなると、オブジェクト同士のつながりではなく、クラス間の関係だと見なすことができる。
また、もし私がOrange
というクラスを追加で使用したい場合、Productクラスのコンストラクタに直接変更を加える必要があり、これは柔軟性が低いと言える。
結論として、依存性注入が必要な理由を挙げると
クラス間の強い結合 + コードの柔軟性の低下
このような問題を依存性注入によって解決できるため、必要であると言えるだろう!
解決策の適用
public interface Fruit {
}
public class Apple implements Fruit {
}
public class Product {
private Fruit fruit;
public Product(Fruit fruit) {
this.fruit = fruit;
}
}
各クラスが独立性を確保していることが確認できる。
- 新しいFruitを追加してもProductは変わらない
- クラス間の関係ではなく、オブジェクト間の関係が形成される
댓글 작성
게시글에 대한 의견을 남겨 주세요.