본문 바로가기

C#

IoC(Inversion of Control; 종속성 반전)

728x90

애플리케이션 내에서 종속성의 방향은 구현 세부 정보가 아닌 추상화 방향에 있어야 합니다. 대부분의 애플리케이션은 컴파일 시간 종속성을 런타임 실행 방향으로 전달하여 직접 종속성 그래프를 생성하도록 작성됩니다. 즉, 클래스 A가 클래스 B의 메서드를 호출하고 클래스 B가 클래스 C의 메서드를 호출하는 경우 아래 그림에 표시된 대로 컴파일 시간에 클래스 A는 클래스 B에 종속되고 클래스 B는 클래스 C에 종속됩니다.

직접 종속성 그래프

종속성 반전 원칙을 적용하면 A는 B가 구현하는 추상화에 대해 메서드를 호출할 수 있고, 런타임에 A가 B를 호출할 수 있게 되지만 B는 컴파일시간에 A에 의해 제어되는 인터페이스에 종속됩니다.(따라서 일반적인 컴파일 시간 종속성이 '반전'됩니다.) 런타임에 프로그램 실행 흐름은 그대로 유지되지만, 인터페이스가 도입된다는 것은 이러한 인터페이스의 여러 구현을 손쉽게 연결할 수 있다는 의미입니다.

반전된 종속성 그래프

종속성 반전은 느슨하게 결합된 애플리케이션을 빌드하기 위한 핵심 부분입니다. 상위 수준 추상화에 종속되고 상위 수준 추상화를 구현하도록(그 반대가 아니라) 구현 세부 사항을 작성할 수 있기 때문입니다. 그 결과로 얻게 되는 애플리케이션은 테스트용이성, 모듈성 및 유지 관리 용이성이 더 우수합니다. 종속성 주입의 실행은 종속성 반전 원칙에 따라 가능합니다.

[출처]
https://learn.microsoft.com/ko-kr/dotnet/architecture/modern-web-apps-azure/architectural-principles#dependency-inversion

728x90