제어의 역전(IoC)은 일반적인 프로그래밍에서, 프로그램의 제어 흐름 구조가 뒤바뀌는 것을 의미
-> 객체의 생성, 관리, 객체 간의 의존성 처리 등을 프레임워크에서 대신 처리해주는 것이 IoC의 대표적인 예
장점
의존성 주입(DI)
특징
필드 주입
클래스 외부에서 접근이 불가능해 테스트 하기 어려움
@Autowired
private BookDAO bookDAO;
Setter 주입
변경 가능성이 있는 의존 관계에 사용
@Autowired
public void setBookDAO(BookDAO bookDAO){
this.bookDAO = bookDAO;
}
생성자 주입
생성자 주입의 이점
1. 필드에 final 키워드를 사용할 수 있다.
2. 순환참조를 스프링 시작(컨테이너 생성 시)과 동시에 확인하고 에러를 발생시켜 준다.
3. 중간에 값이 오염되지 않음을 확신을 가지고 사용할 수 있다.(불변성)
4. 테스트 코드 작성 시 테스트 코드에 @Autowired 또는 주입받는 대상의 setter 등을 추가하지 않고 순수 자바 코드로 테스트 가능하다.
→ 생성자는 순수 자바 코드에서도 작동하므로 @Autowired를 생략해도 동작
@Autowired
public BookService(BookDAO bookDAO) {
this.bookDAO = bookDAO;
}