230302 굿모닝세션

허크·2023년 3월 2일
0

의존성 주입


예제) 음료수 주문 프로그램


private CozDiscountConditon cozDiscountConditon = new CozDiscountConditon(500);

int price = cozDiscountConditon discount(selectedProduct.getPrice());

  • 직접 Kiosk 클래스에서 결정할 수 없도록 변경
    -> XXXX.discount()의 XXXX가 discount를 가지고있다는게 보장되야함
    -> 추상메서드 or 인터페이스 사용


  • 인터페이스 생성
public interface DiscountCondition {
    int discount(int price);
}
  • 인터페이스 적용
public class CozDiscountCondition implements DiscountCondition {}
  • Kiosk 수정
private DiscountCondition discountCondition = new cozDiscountCondition(500);

int price = discountCondition(selectedProduct.getPrice());

  • 아직 Kiosk가 직접 결정하고 생산하고 있다
    -> 해당부분을 날리고 생성자를 생성
private DiscountCondition discountCondition;

public Kiosk(DiscountCondition discountCondition) {
        this.discountCondition = discountCondition;
    }

int price = selectedProduct.getPrice();
  • Main 클래스 수정
Kiosk kiosk = new Kiosk(cozDiscountCondtion.cozDiscountConditon(500));
  • Kiosk와 Main에서 할인과정을 분리 외부클래스에 의존하도록 만듬
    -> 의존성 주입

  • 의존성 주입의 핵심은 추상화다형성
    -> 가져야할 공통 메서드를 분리 => 추상화
    -> 참조변수는 하나지만 인스턴스에 따라서 실행결과값이 달라짐 => 다형성



  • 하지만 아직 프로그램의 로직에 관여하는 Main을 수정해야함
    -> 프로그램 로직과 관련없는 할인조건변경만을 담당하는 외부클래스 생성
public class AppConfigurer {

    public DiscountCondition discountCondition() {
        return new CozDiscountCondition(500);
    }
  • Main 클래스에 적용
AppConfigurer appConfigurer = new AppConfigurer();

Kiosk kiosk = new Kiosk(appConfigurer.discountCondition());



BurgerQueen 프로그램 만들기


예제 키포인트

  • 1~9는 단순한 기능구현
    -> 단순히 클론코딩해선 안됨
    -> 본문의 설명이 코드에 어떻게 적용되는지 이해하기

  • 10번이 중요
    -> 의존성 주입, 리펙토링
    -> 적용전, 적용후를 반복해가며 여러번 연습하기

  • 처음하면 높은 확률로 에러발생
    -> 에러 헨들링이 실전예제에서 매우 중요
    -> 에러 헨들링 과정 기록해두기

profile
codestates seb 44th // 다크모드로 보는걸 추천드립니다

0개의 댓글