의존성 주입 - 의존성 주입에 대해 이해하고 잘 활용한다면 우리는 컴파일되어질때가 아니라 런타임시기에 필요한 의존성 코드들을 선택.
의존성은 한 클래스가 다른 클래스의 기능을 사용할 때 발생.
의존성 - 테스트하기 어려워진다. (결합도가 높다) A를 하려면 B가 필요하다는 의미므로.
B 클래스를 직접 생성하지 않고, 외부에서 전달해준다
의존성을 가지는 코드가 많아진다면, 재활용성이 떨어짐, 매번 의존성을 가지는 객체들을 함께 수정해 주어야 한다는 문제가 발생.
이러한 의존성을 해결 -> Dependency Injection, 의존성 주입.
Injection, 주입은 외부에서 객체를 생성해서 넣는 것을 의미.
의존관계역전법칙(DIP): 구체적인 것이 추상화된 것에 의존 해야한다. (추성화된 것: Protocol)
protocol에 대한 소스코드 의존성이 생겼을 뿐 구체적 클래스에 의존피한다.
다음과 같이 init외에도 func을 이용해서 의존성 주입 가능
mutating func changePerson(person: Person) {
self.currentPerson = person
}
장점:
단일책임원칙:
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해야 할 것이며 이는 빌드시간에 그대로 영향을 미친다.