<aside> 🍎 하나의 객체에서 다른 객체를 가져다 사용하는 것
</aside>
class Order {
private burger: Burger;
getFood(): string {
this.burger = new Burger();
return this.burger.makeFood();
}
}
class Burger {
makeFood(): string {
return '치즈버거';
}
}
Order 클래스는 Burger 클래스의 makeFood() 메소드를 사용하여 getFood() 메소드를 구성
Order 클래스는 Burger 클래스 없이는 완성을 못함
→ Order 클래스는 Burger 클래스와 의존 관계에 있다
class Order {
// private burger: Burger;
// getFood(): string {
// this.burger = new Burger();
// return this.burger.makeFood();
// }
private noodle: Noodle;
getFood(): string {
this.noodle = new Noodle();
return this.noodle.makeFood();
}
}
class Noodle {
makeFood(): string {
return '쌀국수';
}
}
인터페이스
를 만들고 그것의 구현체
를 만듦으로써 해결interface Food {
makeFood(): string;
}
class Burger implements Food {
makeFood(): string {
return '치즈버거';
}
}
class Noodle implements Food {
makeFood(): string {
return '쌀국수';
}
}
class Order {
private food: Food;
getFood(food: Food): string {
this.food = food;
return this.food.makeFood();
}
}
<aside> 🍎 의존성 주입(Dependency Injection)
필요한 객체를 직접 생성하는 것이 아니라 외부에서 객체를 전달받아 주입해줌으로써 객체 간의 결합도를 줄이고 유연한 코드를 만드는 방식
</aside>
<aside> ⚠️ 단순히 외부에서 객체를 전달받는 것을 의존성 주입이라고 말하지는 않는다. 추상화된 객체를 외부에서 받아야 제대로된 의존성 주입. Food 형태가 아니라 Burger나 Noodle 형태로 의존성 주입을 받도록 한다면 기존의 문제를 해결할 수 없다!
</aside>