Dependency, 의존성
- 위에 그럼 처럼 B 클래스(상위계층)에서 A 클래스(히위계층) 를 내부에 변수로 사용한다
- B 클래스(상위계층)는 A 클래스(하위계층)에 의존관계가 생기게 됩니다. => 상위계층은 하위계층에 의존하게 된다
- 객체가 의존성을 스스로 생성
Dependency Injection, 주입
- 내부가 아니라 외부에서 객체를 생성해서 넣어주는 것
- 객체가 의존성을 스스로 생성하고 관리하지 않는다
- 우리가 객체에 의존성을 주입시킴으로써 의존 관계 역전 법칙으로 의존 관계를 분리
IoC, Inversion of Control, 의존 관계 역전
- 예를 들어 A 객체에서 B 객체가 필요하다고 할 때(A는 B에 의존), A 클래스에는 B인스턴스를 직접 생성하여 사용할 수 있다
- 문제는 B의 구현체가 변경되었을 때 발생합니다. A는 B를 직접 참조하고 있으므로 B가 변경될 때 마다 컴파일러는 A를 다시 컴파일해야 합니다.
- 이를 해결하려면 B에 대한 인터페이스 B protocol를 정의하고, A에서는 B protocol을 이용
- 제어의 역전
- B는 참조를 받는 입장에서 B protocol을 참조하는 방향으로 바뀐다.
- 기존의 제어 흐름과 소스코드의 의존성이 반대가 되는 것.
- DIP :
- 상위 모듈은 하위 모듈에 의존해서는 안된다. 상위 모듈과 하위 모듈 모두 추상화에 의존해야 한다.
- 추상화는 세부 사항에 의존해서는 안된다. 세부사항이 추상화에 의존해야 한다.
- B 클래스가 A 클래스에 의존하는 (B→A) 구조였다면, 의존 관계 역전 법칙에서는 어떤 추상화된 인터페이스(Swift 에서는 프로토콜)에 A, B 객체가 모두 의존(A → 프로토콜 ← B) 한다
Dependency Injection 장점
- Dependency Injection는 객체간 사이의 의존성을 최소화 해서 Coupling을 줄인다.
- 결합도(coupling)는 낮추면서 유연성과 확장성은 향상
- 테스트에 용이
- 객체간 종속성이 감소하여 상호 변경에 민감하지 않는다.
- 재사용성을 높여준다
참고자료
https://eunjin3786.tistory.com/233
https://baechukim.tistory.com/102
https://medium.com/@jang.wangsu/di-dependency-injection-%EC%9D%B4%EB%9E%80-1b12fdefec4f
'Object-Oriented Programming > SOLID' 카테고리의 다른 글
Dependency Injection Container & Swinject (0) | 2022.03.14 |
---|---|
SOLID 원칙 (0) | 2021.12.23 |