TIL

의존성의 역전

다형성이란 하나의 메서드나 클래스가 있을 때 이것들이 다양한 방법으로 동작하는 것을 의미한다. 이는 상속이나 인터페이스를 통해 구현할 수 있다.

흔히 다형성을 활용하는 예로 인터페이스로의 추상화를 통해 OCP 원칙을 적용하는 것이다. 한 클래스가 구체 타입에 의존하지 않고 인터페이스에 의존하면서 구체 타입의 변경에 영향 받지 않게 된다.

보통 다형성을 활용하지 않고 코드를 짜면 코드의 의존성 방향과 제어의 흐름 방향이 일치하게 된다. A가 B를 의존하면 제어의 흐름도 A에서 B로 이동한다. A가 B를 호출하기 때문이다.

인터페이스를 통한 다형성을 적용한다고 해보자. A가 C라는 인터페이스를 의존하고 C를 B가 구현했다고 하자. 그럼 런타임에 다형성이 적용되어 A가 B를 호출하는 것은 같아서 제어의 흐름(A → B)은 그대로다. 그러나 코드를 보면 의존성이 A → C ← B 이렇게 변화하여 의존의 방향이 제어의 흐름과 역전 되었다.

이런 접근법을 통해 다형성을 지원하는 코드로 개발을 하게 되면 개발자가 소스 코드 의존성 전부에 대해 방향을 결정할 수 있는 절대적인 권한을 갖는다. 이를 통해 플러그인 아키텍처를 구성할 수 있고 이를 통해 고수준 정책을 포함하는 모듈은 저수준의 세부 사항을 포함하는 모듈에 대해 독립성을 보장할 수 있다 저수준의 세부사항은 중요도가 낮은 플러그인 모듈로 만들 수 있고, 고수준의 정책의 모듈은 독립적으로 개발하고 배포할 수 있다.