토마토바구니
같은 클래스의 다른 메소드에서 사용되기 위함보다는 객체들 간의 느슨한 결합을 위해 사용됩니다.
A 라는 클래스가 B 라는 클래스에 강한 의존을 할 경우 B 라는 클래스에 변경 사항이 생기면 A 라는 클래스 또한 다시 테스트를 해야하거나 예상치 못한 버그가 발생할 수 있습니다. 이 처럼 서로 강한 결합을 하게 되면 확장성이 떨어지고, 사이드 이펙트가 크다는 단점이 생기게 됩니다. 흔히 말하는 스파게티 코드가 이와 같은 경우를 많이 내제하고 있습니다. 서로 이곳저곳에서 클래스끼리 강한 결합을 하니 코드가 스파게티 처럼 꼬이는 거죠.
하지만, 이를 의존성 주입을 통해 실제 알고리즘의 구현은 인터페이스로 분리하여 구현하게 하고 의존성을 받아 사용하면 변화에 대해 유연하게 대응할 수 있습니다. A 라는 클래스에서 인터페이스를 구현한 B 라는 클래스를 생성자를 통해 의존성 주입을 받으면, B 라는 클래스에서 변경 사항이 생겨도 A 라는 클래스는 변화가 없으니 사이드 이펙트를 걱정할 필요가 없는거죠.
디자인 패턴을 공부하시면 더 많은 내용을 알아볼 수 있습니다.