IOC
728x90

스프링 규약에 의해 스프링 컨테이너가 관리하는 객체를 보통 Bean(빈)이라고 부른다. 빈은 예제 애플리케이션의 근간을 구성한다. 

 

자바에서는 객체의 의존성을 관리하기 위한 두 가지 방법이 있다.

 

첫번째 방법은 객체가 직접 의존관계에 있는 객체들의 생성자를 호출하는 것으로 의존성을 인스턴스화 하는 것이고 

 

두번째 방법은 룩업(look-up) 패턴을 활용해 의존성들을 찾아 배치하는 것.

 

다음의 RegistrationService는 회원가입에 성공한 이후에 사용자에게 이메일을 전송하는 예제이다. 단순화 하기 위해 의존성 부분에 초점을 맞추고 회원 가입과 이메일을 전송하는 세부 사항은 생략한다.

 

다음 코드는 RegistrationService가 생성자에서 MailSender를 인스턴스화 하는 방법을 보여준다.

 

public class ResgistrationService{
	private MailSender mailSender;
    public RegistrationService(){
    //의존하는 객체를 인스턴스화
    	this.mailSender = new MailSender();
    }
    ...
 }

보기와 같이 RegistrationService는 MailSender를 인스턴스화 함으로써 의존성을 관리한다. 이것이 의존성을 관리하는 첫번째 방법이다.

 

생성자 또는 세터를 통해 의존성을 주입하기 위해 스프링과 같은 컨테이너에 의존하는 두번째 방법을 보도록 하자.

 

예를 들어 다음과 같이 RegistrationService를 변경할 수 있다.

public class ResgistrationService{
	private MailSender mailSender;
    public RegistrationService(MailSender mailSender){
    	this.mailSender = mailSender;
    }
    ...
 }

보기와 같이 생성자의 인자로 MailSender 인스턴스를 추가한다. 이 방법에서 RegistrationService는 의존성을 제어 못한다. 여기서 스프링이 MailSender 인스턴스를 인스턴스화 하는 책임을 진다. 의존성 제어가 역전 되었다. 여기서 제어의 역전이라는 명칭이 유래했다.

728x90