230303 굿모닝세션

허크·2023년 3월 3일
0

의존성 주입

문제

-> 할인 조건을 변경할 때마다, 기존의 Kiosk의 코드를 바꿔야 했다.
-> 변화와 확장에 유연하지 않다.

목적지

-> 할인 조건을 변경해도 기존의 코드를 변경하지 않아야 한다.

문제 원인 추적

-> 할인 조건을 변경함에 따라 바꿔야하 하는 코드

  1. 참조변수 선언 및 초기화부
    • Kiosk가 어떤 할인 조건 클래스의 인스턴스를 사용할지 직접 결정하고, 직접 생성하고 있다.
    • 참조변수의 타입이 구체적인 클래스 타입이다.
  2. discount() 호출부
    • 구체적인 클래스 타입의 참조변수를 통해 discount()를 호출한다.

문제 해결 방법

  1. Kiosk가 할인 조건 인스턴스를 직접 결정하지 못하게, 직접 생성하지 못하게 해야 한다.
    • 어떻게? -> 외부에서 결정하고 생성해서 전달해주어야 한다.
  2. 구체적인 클래스 타입의 참조변수가 아닌, discount() 메서드를 가지고 있음을 보장 받는 무언가를 통해 discount()를 호출해야 한다.
    • 어떻게? -> 추상메서드를 활용해서 메서드를 가지고 있음을 보장해야 한다.
    • 추상 메서드를 사용할 수 있는 문법 요소는? 추상클래스, 인터페이스

문제 해결 과정 -> DI 적용

  1. 인터페이스를 만들고, Kiosk가 사용하는 메서드를 추상 메서드로 정의한다.
  2. Kiosk가 사용하게 될 객체들이 인터페이스를 구현하게 한다.
  3. Kiosk에서 인터페이스 타입의 참조변수를 만든다.
  4. Kiosk가 사용할 인스턴스를 외부로부터 받아올 수 있게 생성자를 정의한다.
  5. 인터페이스 타입의 참조변수를 통해 discount()를 호출한다.
  6. Kiosk를 인스턴스화하는 부분에서 생성자의 인자를 추가해준다.
profile
codestates seb 44th // 다크모드로 보는걸 추천드립니다

0개의 댓글