HelloController가 SimpleHelloService라는 클래스를 직접 의존하고 있는 상태에서는 new SimpleHelloServcie와 같이 오브젝트를 만들어서 변수에 담아서 사용을 했음
HelloController는 SimpleHelloService에 직접 의존하고 있음
SimpleHelloService의 변경이 HelloController에 직접 영향을 미침
HelloController는 추상화된 HelloService에만 의존하고, 구현 클래스들이 HelloService 인터페이스를
구현하도록 설계
HelloController의 코드를 전혀 고치지 않고도 HelloService 인터페이스를 구현한 클래스를 교체해가면서 다양하게 적용하는게 가능해짐
런타임시에는 SimpleHelloService라는 클래스의 오브젝트를 사용하고 있어야되기 때문에 실제로는 의존하고 있음
오브젝트 레벨에서의 의존관계는 처음 Spring Container가 뜰 때 Spring Container가 Dependency Injectio의 Assembler 역할을 해서 HelloController와 SimpleHelloService를 엮어주는 역할을 함(의존관계 주입)
동적으로 작동하기 때문에 HelloController 측의 코드를 건드리지 않고 SimpleHelloService를 ComplexHelloService로 변경할 수 있음
HelloService 인터페이스를 구현하는 클래스는 필요하다면 계속 추가가 가능함