하나의 객체가 다른 객체의 의존성을 제공하는 기법.
의존성은 한 객체가 다른 객체를 사용하는 경우를 말한다.
이 객체를 클라이언트와 공급자로 나눠서 보면, 의존성 주입의 목적은 클라이언트가 구체적인 지식 없이도 공급자로부터 서비스를 쉽게 공급받도록 하는 것이다.
그렇다면 어떻게 만들어야 할까? 중간에 복잡한 과정을 생략하고 클라이언트가 보는 방향에서는 서비스를 공급받으려면 버튼을 누르시오 정도로 간단하게 만들어줄 인터페이스를 사이에 끼워줘야 한다.
이러한 구조를
이런 식으로 구조를 변형한다면, 클라이언트는 객체를 생성하는 구체적인 방법을 모르더라도 객체를 생성할 수 있게 된다.
예시를 하나 들어보자.
여기 CoffeeMachine이라고 하는 클래스가 있다고 해보자. 이 클래스는 커피를 생성하는 메서드가 있다.
class CoffeMachine
{
private Coffee milkcoffee;
public Drink
{
this.milkcoffee = new coffee();
}
}
당신이 밀크 커피를 좋아한다면 상관 없겠지만, 만약 다른 커피를 마시고 싶다면 Drink 내부의 코드도 전부 변경해야 할 것이다.
하지만 이렇게 코드를 짠다면 어떨까?
class CoffeeMachine
{
private Coffee milkcoffee;
public Drink(Coffee coffee)
{
this.coffee = coffee;
}
}
class Coffee {}
class Espresso extends Coffee{}
class Latte extends Coffee{}
순식간에 이 커피 머신은 에소프레소와 라떼를 뽑을 수 있게 되었다.
즉, 생성자를 통해 의존성 주입을 하여 클라이언트가 서비스를 외부에서 넘겨받는 식으로 만들게 된다면, 저 클래스를 상속받은 파생 클래스도 쉽게 전달받을 수 있게 된다.
'Programming > 기타' 카테고리의 다른 글
TDD(Test- Driven Development)에 대하여 (1) | 2024.12.06 |
---|---|
동적 연결 라이브러리 (Dynamic Linked Library) (0) | 2024.12.03 |
리팩토링 (0) | 2024.11.30 |
코드스멜 (0) | 2024.11.30 |
컴파일러 (1) | 2024.11.30 |