객체가 다른 객체와 상호 작용하는 경우를 객체의 의존 관계 라고 한다.
DI는 객체 간의 의존 관계를 (생성자 인수 or 세터 메소드 인수)로 명시하고 객체를 생성할 때 생성자나 세터를 통해 의존 관계를 주입하는 방식을 따른다.
스프링 IoC 컨테이너는 스프링 어플리케이션에서 존재하는 객체를 생성하고 의존 관계를 주입하는 일을 담당한다. (어플리케이션 객체 : Bean -> 싱글톤 패턴)
IoC(Inversion of Control)란 "제어의 역전" 이라는 의미로, 말 그대로 메소드나 객체의 호출작업을 개발자가 결정하는 것이 아니라, 외부(스프링)에서 결정되는 것을 의미한다.
객체의 의존성을 역전시켜 객체 간의 결합도를 줄이고 유연한 코드를 작성할 수 있게 하여 가독성 및 코드 중복, 유지 보수를 편하게 할 수 있게 한다.
스프링에서는 다음과 같은 순서로 객체가 만들어지고 실행된다.
1. 객체 생성
2. 의존성 객체 주입
스스로가 만드는것이 아니라 제어권을 스프링에게 위임하여 스프링이 만들어놓은 객체를 주입한다.
3. 의존성 객체 메소드 호출
스프링 기반 어플리케이션에서 객체와 그들의 의존 관계에 대한 정보는 메타데이터를 사용해 지정한다. (방식 - XML, 어노테이션(자바코드))
이런식으로 스프링 컨테이너가 객체에 추가 기능을 부여하고 애플리케이션 객체를 평범한 자바 객체(POJO)로 모델링 할 수 있다. (Ex. ~~Controller, ~~Service)
스프링은 객체 생성과 의존 관계 주입을 처리함으로써 자바 Application 조합을 쉽게 만들어준다.
정독 완료욤 ^_^