하향식 의존관계

HelloController가 SimpleHelloService라는 클래스를 직접 의존하고 있는 상태에서는 new SimpleHelloServcie와 같이 오브젝트를 만들어서 변수에 담아서 사용을 했음

HelloController는 SimpleHelloService에 직접 의존하고 있음

SimpleHelloService의 변경이 HelloController에 직접 영향을 미침

image.png

상향식 의존관계

image.png

HelloController는 추상화된 HelloService에만 의존하고, 구현 클래스들이 HelloService 인터페이스를

구현하도록 설계

상향식 의존관계 장점

HelloController의 코드를 전혀 고치지 않고도 HelloService 인터페이스를 구현한 클래스를 교체해가면서 다양하게 적용하는게 가능해짐

image.png

image.png

런타임시에는 SimpleHelloService라는 클래스의 오브젝트를 사용하고 있어야되기 때문에 실제로는 의존하고 있음

오브젝트 레벨에서의 의존관계는 처음 Spring Container가 뜰 때 Spring Container가 Dependency Injectio의 Assembler 역할을 해서 HelloController와 SimpleHelloService를 엮어주는 역할을 함(의존관계 주입)

동적으로 작동하기 때문에 HelloController 측의 코드를 건드리지 않고 SimpleHelloService를 ComplexHelloService로 변경할 수 있음

image.png

HelloService 인터페이스를 구현하는 클래스는 필요하다면 계속 추가가 가능함