private CozDiscountConditon cozDiscountConditon = new CozDiscountConditon(500);
int price = cozDiscountConditon discount(selectedProduct.getPrice());
public interface DiscountCondition {
int discount(int price);
}
public class CozDiscountCondition implements DiscountCondition {}
private DiscountCondition discountCondition = new cozDiscountCondition(500);
int price = discountCondition(selectedProduct.getPrice());
private DiscountCondition discountCondition;
public Kiosk(DiscountCondition discountCondition) {
this.discountCondition = discountCondition;
}
int price = selectedProduct.getPrice();
Kiosk kiosk = new Kiosk(cozDiscountCondtion.cozDiscountConditon(500));
Kiosk와 Main에서 할인과정을 분리 외부클래스에 의존하도록 만듬
-> 의존성 주입
의존성 주입의 핵심은 추상화와 다형성
-> 가져야할 공통 메서드를 분리 => 추상화
-> 참조변수는 하나지만 인스턴스에 따라서 실행결과값이 달라짐 => 다형성
public class AppConfigurer {
public DiscountCondition discountCondition() {
return new CozDiscountCondition(500);
}
AppConfigurer appConfigurer = new AppConfigurer();
Kiosk kiosk = new Kiosk(appConfigurer.discountCondition());
1~9는 단순한 기능구현
-> 단순히 클론코딩해선 안됨
-> 본문의 설명이 코드에 어떻게 적용되는지 이해하기
10번이 중요
-> 의존성 주입, 리펙토링
-> 적용전, 적용후를 반복해가며 여러번 연습하기
처음하면 높은 확률로 에러발생
-> 에러 헨들링이 실전예제에서 매우 중요
-> 에러 헨들링 과정 기록해두기