의존성 역전 원칙- 1

hyuckhoon.ko·2022년 9월 4일
0

1. DIP 적용 전

from typing import List


class KakaoPayHandler:
    def handle_payment(self, total):
        print(f"{total}")


PRICES = {
    "burger": 10,
    "pizza": 7,
    "drink": 5,
}


def order_food(items: List[str]) -> None:
    total = sum(PRICES[item] for item in items)
    payment_handler = KakaoPayHandler()
    payment_handler.handle_payment(total)


if __name__ == "__main__":
    order_food(["burger", "pizza", "drink"])

2. DIP 적용 후

from typing import List


class KakaoPayHandler:
    def handle_payment(self, total):
        print(f"{total}")


PRICES = {
    "burger": 10,
    "pizza": 7,
    "drink": 5,
}


def order_food(items: List[str], payment_handler: KakaoPayHandler) -> None:
    total = sum(PRICES[item] for item in items)
    payment_handler.handle_payment(total)


if __name__ == "__main__":
    payment_handler = KakaoPayHandler()
    order_food(["burger", "pizza", "drink"], payment_handler)

3. 효과

  • order_food 모듈을 테스트하기 훨씬 쉽다
  • order_food는 KakaoPayHander에 의존하게 됐다
  • (실제 카카오페이와 결제를 처리하는 저수준 로직은 ) KakaoPayHander에 의존하고 있다.
    - 따라서, 고수준 모듈과 저수준 모듈 모두 추상화에 의존하게 됐다.

0개의 댓글