1. 개요
가끔가다 한국어가 어색했던 적이 있으신가요? 제게는 DIP가 그런 존재인데요, 오늘은 인터페이스를 사용하면 어떻게 DIP (의존성 역전) 이 성립하는 지 알아보겠습니다.
2. 의존성 역전이란
쉽게 말해 어떤 클래스를 참조해야 할 일이 생겼을 때, 해당 클래스를 직접 참조하는 것이 아니라 대상 클래스의 상위 요소 (인터페이스 혹은 추상 클래스) 를 참조하는 것입니다.
참고로 의존성이란 다음과 같습니다 :
B 클래스의 코드가 변경되었을 때 A 클래스의 코드도 변경됩니다. 이 때, A 클래스는 B 클래스에 의존한다고 할 수 있습니다.
객체 지향에서는 추상성이 낮은 클래스 보다 추상성이 높은 클래스와 통신하는 것을 지향 하고 있습니다. 이러한 개념이 바로 DIP 입니다.
추상성이 높은 클래스와 통신하는 이유는 하위 모듈의 구체적인 내용에 클라이언트가 의존하게 되면 하위 모듈에 변화가 있을 때마다 클라이언트나 상위 모듈의 코드를 자주 수정해야 하기 때문입니다.
3. 전통적인 개발 방법
전통적인 개발 방법은 클라이언트가 구체 클래스를 의존하는 것입니다.
의존성 역전을 사용하게 되면 클라이언트는 구체 클래스에 의존하는게 아니라 추상적인 부분에 의존하게 됩니다.
우리는 이를 의존성이 역전 된다고 표현합니다. 즉, 자주 변경될 수 있는 구체적인 클래스에 의존하는 것이 아닌 잘 변하지 않는 추상적인 부분에 의존하는 것입니다.
기존에는 화살표가 다음으로 갔다면
클라이언트 -> 구체 클래스
이제는 다음과 같이 표현할 수 있습니다.
클라이언트 -> 인터페이스 <- 구체 클래스
이 때 흥미로운 점은 클라이언트만 추상적인 부분에 의존하는게 아니라 구체 클래스까지 추상에 의존하게 된다는 점입니다.