DI란?
Dependency(의존관계)?
**“A가 B를 의존한다”**는 표현은 추상적인 표현이지만 결국은 의존 대상이 기능 추가 또는 변경이 일어나면 함께 영향을 미친다는 의미를 가짐
[예제]
// DI
class BaseBall {
private Pitcher pitcher; // 투수
// 야구공
public BaseBall() {
pitcher = new Pitcher();
}
}
// 의존관계
// 야구공은 투수와 의존함을 보여줌!
// 야구공 - 투수
// 야구공 - 포수
// 야구공 - 타자
// 야구공 - 심판
인터페이스로 추상화
BaseBall로 예시로 들면, 구현에서 Pitcher만을 의존할 수 있는 구조로 되어 있으며, 더 다양한 메서드를 의존 받을 수 있게 구현하는 것을 인터페이스로 추상화 한다고 말함
[예제]
// 인터페이스로 추상화
class BaseBall {
private Pitcher pitcher; // 투수
private Hitter hitter; // 타자
// 야구공[투수, 타자](생성자)
public BaseBall() {
pitcher = new Pitcher();
hitter = new Hitter();
}
}
// 인터페이스
interface Hitter {
baseBallHit();
// 다양한 메서드
}
구현방법
생성자를 이용함
[예제]
class BurgerChef {
private BurgerRecipe burgerRecipe;
public BurgerChef(BurgerRecipe burgerRecipe) {
this.burgerRecipe = burgerRecipe;
}
}
class BurgerRestaurantOwner {
private BurgerChef burgerChef = new BurgerChef(new HamburgerRecipe());
public void changeMenu() {
burgerChef = new BurgerChef(new CheeseBurgerRecipe());
}
}
메서드를 이용함
[예제]
class BurgerChef {
private BurgerRecipe burgerRecipe = new HamburgerRecipe();
public void setBurgerRecipe(BurgerRecipe burgerRecipe) {
this.burgerRecipe = burgerRecipe;
}
}
class BurgerRestaurantOwner {
private BurgerChef burgerChef = new BurgerChef();
public void changeMenu() {
burgerChef.setBurgerRecipe(new CheeseBurgerRecipe());
}
}
장점