Inversion of Control이라고도 하는 의존 관계 주입, 어떤 객체가 사용하는 의존 객체를 직접 만들어 사용하는게 아니라, 주입 받아 사용하는 방법
@Service
public class BookService {
private BookRepository bookRepository;
public BookService(BookRepository bookRepository) {
this.bookRepository = bookRepository;
}
}
public class BookRepository {
// Test
}
위 코드와 같이 BookService 클래스가 만들어지기 위해서는 BookRepository 클래스가 필요하다.
이것을 BookService 클래스는 BookRepository 클래스의 의존성을 가진다라고 말한다.
BookRepository라는 클래스를 직접 new를 사용하여 객체를 주입하는 것이 아니라 생성자를 사용하여 주입받는 것을 Inversion of Control 이라고 한다.
강한결합
느슨한 결합
추가적으로 BookService와 BookRepository가 둘 다 Bean으로 등록되어 있을 때, BookService의 생성자만 만들어 주면 스프링 IoC 컨테이너가 BookRepository에 의존성 주입을 알아서 해준다.
스프링 4.3 이후부터는 생성자가 하나인 경우는 @Autowired를 사용하지 않아도 된다.
BookRepository bookRepository = new BookRepository();
BookService bookService = new BookService(bookRepository);
스프링이 사용되지 않는다면 위 코드와 처럼 직접 new 연산자를 통해서 Inversion of Control을 해줘야한다.