오브젝트를 만들때 관계에 집중하여 살펴봄.
기본적인 dao를 만들고 db 커넥션을 만들때 관심사에 집중함.
변치 않는 부분은 슈퍼클래스, 자주 변하는 부분은 서브클래스로 만듦.
슈퍼클래스 코드에서 인터페이스 타입으로 오브젝트를 사용. 오브젝트 생성은 서브클래스에서 담당.
오브젝트 생성 방법을 정해서 반환해줌. (클라이언트에서 어떤 객체를 사용할지를 정해줌. 클라이언트와 핵심 서비스의 중간 역할)
일반적인 메소드는 자신이 사용할 오브젝트를 직접 생성하지만 제어의 역전이 일어나면 메소드를 사용할때 오브젝트를 생성하지 않고 받아와 사용함.
스프링에서는 제어의 역전으로 사용될 메소드를 빈(bean)이라고 함. 그래서 이러한 빈을 생성해주는것이 빈 팩토리. 근데 스프링에서는 어플리케이션을 관리해주는 부가적인 기능을 추가해서 어플리케이션 컨텍스트를 사용함(빈 팩토리는 상속으로 사용).
의존관계 주입이라고도 하는데, 여기서 의존관계는 임의의 클래스가(예를 들어 인터페이스) 런타임시 실제로 어떤 객체를 사용할지를 결정해주는 일임. 즉 자신이 사용할 객체를 직접 생성하는 것이 아닌 제 3자가 결정해줌. 이런 DI를 해주는것이 스프링의 IOC(어플리케이션 컨텍스트). 스프링의 IOC는 주로 DI를 하는것에 초점을 맞추어 DI 컨테이너라고도 함.