DI
, DI 컨테이너
를 제공함으로써 다형성 + OCP, DIP
를 가능하도록 지원한다.결론적으로, 구현과 역할을 구분하는 것이 중요한 것 같다.
인터페이스와 이를 구현한 객체를 확실히 구분하여 인터페이스를 중심으로 이를 확장한다는 것이다. 이는 기능을 확장할 때 좋다고 한다. 연극을 하는 배우가 있다고 할 때, 역할을 맡은 배우는 교체될 수 있지만, 극에서의 캐릭터의 특성, 역할은 변경되지 않으므로 역할에 초점을 맞춰야 하는 것처럼 말이다.
그러나, 인터페이스를 도입하면 추상화라는 비용이 발생하기 때문에 기능을 확장할 가능성이 없다면 구체 클래스를 직접 사용하고 향후 꼭 필요할 때 리팩토링해서 인터페이스를 도입할 수도 있다.