Spring 의존성 주입

후니·2023년 10월 9일

스프링

목록 보기
5/5

스프링에서 의존성 주입(DI)이란, 객체간 의존성을 개발자가 객체 내부에서 직접 호출(new연산자)하는 대신, 외부(스프링 컨테이너)에서 객체를 생성해서 넣어주는 방식이다. 스프링에서는 3가지 방법의 의존성 주입방법이 있다.
스프링 팀에서는 생성자 주입을 권장한다.

1.생성자 주입

@Controller 
public class Controller{
	private Service service;

	@Autowired 
	public Controller(Service service){
		this.service = service; 
	}
}

2.필드주입

@Controller
public class Controller{
	@Autowired 
	private Service service;
}

3.setter 주입

@Controller 
public class Controller{
	private Service service;

	@Autowired 
	public setService(Service service){
		this.service = service; 
	}
}

스프링생성자 주입을 권장하는 이유

  • 개체불변성 확보
    객체의 생성자는 객체 생성시 최초 1회만 호출된다. 때문에 주입받은 객체가 불변 객체여야 하거나 반드시 해당 객체의 주입이 필요한 경우 사용한다.
  • 테스트용이
    필드 주입으로 작성된 경우, 순수 자바 코드로 단위테스트를 실행하는 것이 불가하다. 메인코드는 Spring과 같은 DI프레임워크 위에서 동작하는데 단위테스트 시 단독적으로 실행되기 때문에 의존관계 주입이 null상태여서 NullPointerException이 발생하게 된다. 생성자 주입 시 단독으로 실행할때도 의존관계 주입이 성립된다.
  • 순환참조 에러방지
    필드주입과 수정자 주입은 프로그램 실행 중에 runtime 에러가 발생하고, 생성자 주입시에는 프로그램 실행 시점에 compile 에러가 발생한다.즉, 실행 시점에 컴파일 에러 발생시 프로그램 실행 자체가 되지 않기 때문에 개발자 입장에서는 실제 서비스 되기 전, 순환 참조 문제를 해결할 수 있다

0개의 댓글