Dependenct Injection 의존주입
>>> 네가 달라붙어서 의존하고 있으면 떼줄께.
>>> 너에게 책임이 없어 그냥 주입자에게 (외부코드 = 주입자) 모두 맡겨.
class Programmer {
private Coffee coffee;
public Programmer() {
this.coffee = new Coffee();
}
public startProgramming() {
this.coffee.drink(); // 일단 마시고 시작하자
}
}
프로그래머가 프로그래밍을 시작하려면 커피 인스턴스를 마셔야 한다.
이 메서드를 실행시키기 위해서는 커피클래스가 필요하다. (커피를 객체생성해야 한다.)
치명적인 단점이 있다. 프로그래머스는 coffe클래스의 내용을 전혀 모른다. 그냥 객체생성만 해서 불러왔을뿐.
drink라는 메서드가 있는지 어쩐지 잘 모른다.
programmer 클래스는 coffe클래스에 의존성을 가진다라고 표현.
기존 의존성을 해제하고 의존을 주입한 경우
class Programmer {
private Coffee coffee;
// 그 날 마실 커피를 고를 수 있게된 개발자
public Programmer(Coffee coffee) {
this.coffee = coffee;
}
public startProgramming() {
this.coffee.drink();
...
}
}
프로그래머가 프로그래밍을 시작하려면 커피 인스턴스를 마셔야 한다.
이 메서드를 실행시키기 위해서는 커피클래스가 필요하다. (커피를 파라미터로 받는다.)
programmer 클래스는 coffe클래스받으면 된다.
간단하게 객체생성하는 것을 파라미터로 받아버린 것.
이유는 다음과 같다.
// Programmer.java
class Programmer {
private Coffee coffee;
public Programmer() {
this.coffee = new Cappuccino(); // 직접 수정
// 또는
this.coffee = new Americano(); // 직접 수정
}
...
}