의존성(Dependency)

<aside> 🍎 하나의 객체에서 다른 객체를 가져다 사용하는 것

</aside>

예시

class Order {
	private burger: Burger;

	getFood(): string {
		this.burger = new Burger();
		return this.burger.makeFood();
	}
}

class Burger {
	makeFood(): string {
		return '치즈버거';
	}
}

결합도 높은 코드의 문제점

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>