Dependency Injection

hankyulee·2022년 8월 4일
0

의존성 주입 - 의존성 주입에 대해 이해하고 잘 활용한다면 우리는 컴파일되어질때가 아니라 런타임시기에 필요한 의존성 코드들을 선택.
의존성은 한 클래스가 다른 클래스의 기능을 사용할 때 발생.
의존성 - 테스트하기 어려워진다. (결합도가 높다) A를 하려면 B가 필요하다는 의미므로.
B 클래스를 직접 생성하지 않고, 외부에서 전달해준다

의존성을 가지는 코드가 많아진다면, 재활용성이 떨어짐, 매번 의존성을 가지는 객체들을 함께 수정해 주어야 한다는 문제가 발생.
이러한 의존성을 해결 -> Dependency Injection, 의존성 주입.
Injection, 주입은 외부에서 객체를 생성해서 넣는 것을 의미.

의존관계역전법칙(DIP): 구체적인 것이 추상화된 것에 의존 해야한다. (추성화된 것: Protocol)

protocol에 대한 소스코드 의존성이 생겼을 뿐 구체적 클래스에 의존피한다.

다음과 같이 init외에도 func을 이용해서 의존성 주입 가능

mutating func changePerson(person: Person) {
        self.currentPerson = person
    }

장점:

  • Testable 한 클래스를 얻게 됩니다.Protocol type으로 받을 경우 쉽게 Mock 오브젝트로 대체할수 있기 때문.
  • Unit Test가 용이해진다. mock object를 외부에서 주입하여 실제 네트워킹 안해도 test.
    역할정의
    소스코드 의존성은 빌드시간에 영향을 미치기 때문에

단일책임원칙:

TODO: https://donggyu9410.medium.com/ios-and-swift-%EC%9D%98%EC%A1%B4%EC%84%B1-%EC%A3%BC%EC%9E%85-60faee384274, Udemy강의

출처:
https://woozzang.tistory.com/137
https://yoongrammer.tistory.com/96
https://80000coding.oopy.io/68ee8d89-5d05-449d-87e2-5fba84d604ca

CarFactory, AHandle, BHandle, CHandle이 각각 다른 모듈에 있다고 가정해보자.
각각의 핸들을 교체할 때마다 해당 Handle 파일이 있는 모듈을 import해야 할 것이며 이는 빌드시간에 그대로 영향을 미친다.

출처:
https://wlgusdn700.tistory.com/m/124


출처:
https://silver-g-0114.tistory.com/143

0개의 댓글