Depend upon abstractions, not concretions
- 상세한 구현에 의존하지 말고, 공통된 개념(추상화)에 의존해라.)

 

1. 학습 목표

: 학습 목표는, 의존성 문제 해결을 위한 "추상화 기술" 이해입니다. 이를 위한 단계별 학습 순서를 확인합니다.

더보기

A. 학습 목표

  • Step 1. 추상 개념 이해
  • Step 2. 추상화 구현 이해
  • Step 3. 추상화된 추상 클래스와 인터페이스 적용하여 구현

 

 

B. 의존성 문제 해결 방법  

 

Q. 클래스1 ↔ 클래스2

     클래스와 클래스 간의 의존 관계를 어떻게 제거할 수 있을까요?

A. 클래스1 ↔ 인터페이스

                         인터페이스 ↔  클래스2 구조로 의존하게 합니다.

 

     인터페이스는 클래스1이 추상화된 형태입니다.

     인터페이스를 '의존성'이라 하고, 

     인터페이스에 의존하는 로직을 클래스2에 구현하는 것을 '의존성 주입(전달)' 이라고 합니다.

 

 

C. 의존성 문제 해결 -  최종 목표

의존성 주입(Dependency Injection)을 통한, 의존성의 제어 역전(Inversion of Control) 상태 구현입니다.

 

이를 위해 아래 개념들을 하나씩 이해해야 합니다.

  • 추상화
  • 추상 클래스, 인터페이스
  • 의존성
  • 의존성 주입(Dependency Injection)
  • 제어 역전(Inversion of Control) 

 

이를 위한 첫번째 단계인, 인터페이스를 구현하기 위한 추상화의 개념을 조금 더 확장해 봅시다.


 

2. 프로그래밍에서 "추상화(Abstraction)"

더보기

A. 추상화

 

4.1 추상화

1. "추상": 단어의 의미더보기A. 목표프로그래밍에서의 "추상화" 개념을 배우기 전에, 일상생활에서 사용되는 "추상"이라는 단어의 의미를 먼저 이해합니다. 일상 속 예시와 미술에서의 추상을 살

basiclike.tistory.com

 

객체지향을 처음 학습할 때는 클래스를 구현하기 위해

현실의 대상을 추상화하여 데이터와 로직으로 구현 관점에서 잠시 다뤘습니다.
이제는 이보다 더 확장된 개념인 "객체의 추상화”에 대해 이해할 필요가 있습니다.

 

 

B. "추상" 사전적 정의 재확인

추상(抽 뽑을  象 코끼리 )
>> 여러 가지 사물(事物)이나 개념(槪念)에서 

공통(共通)되는 특성(特性)이나 속성(屬性) 따를 추출(抽出)하여 파악(把握)하는 작용(作用).

 

 

C. 의존성 생성 (Dependency Creation) 

*객체의 추상화 (= 의존성) 구현

 

 

D. 의존성 주입(Dependency Injection)



3. 의존 역전 관계

더보기

 

 

# 추상화된 인터페이스를 생성한다.
class Animal:
    def speak(self):
        pass

class Cat:
    def speak(self):
        print("Meow")

class Dog:
    def speak(self):
        print("bark")
        
# 추가된다고 가정합니다.
class Sheep:
    def speak(self):
        print("Baaa")

# Zoo 객체는 수정되지 않는다.
class Zoo:
    def __init__(self):
        self.animals = []
    
    def addAnimals(self, animal):
        self.animals.append(animal)
    
    def run(self):
        for animal in self.animals:
            animal.speak()

zoo = Zoo()
zoo.addAnimals(Cat())
zoo.addAnimals(Dog())
zoo.addAnimals(Sheep())
zoo.run()