Spring) DI(Dependency Injection)
Spring 개념
DI (Dependency Injection)
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 이라고 한다.
결합도
강한결합
- 객체 내부에서 다른 객체를 생성하는 것은 강한 결합도를 가지는 구조이다. A 클래스 내부에서 B라는 객체를 직접 생성하고 있다면, B 객체를 C 객체로 바꾸고 싶은 경우에 A 클래스도 수정해야 하는 방식이기 때문에 강한 결합이다
느슨한 결합
- 객체를 주입 받는다는 것은 외부에서 생성된 객체를 인터페이스를 통해서 넘겨받는 것이다.
이렇게 하면 결합도를 낮출 수 있고, 런타임시에 의존관계가 결정되기 때문에 유연한 구조를 가진다.
추가적으로 BookService와 BookRepository가 둘 다 Bean으로 등록되어 있을 때, BookService의 생성자만 만들어 주면 스프링 IoC 컨테이너가 BookRepository에 의존성 주입을 알아서 해준다.
스프링 4.3 이후부터는 생성자가 하나인 경우는 @Autowired를 사용하지 않아도 된다.
BookRepository bookRepository = new BookRepository();
BookService bookService = new BookService(bookRepository);
스프링이 사용되지 않는다면 위 코드와 처럼 직접 new 연산자를 통해서 Inversion of Control을 해줘야한다.
Author And Source
이 문제에 관하여(Spring) DI(Dependency Injection)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ldh7907/Spring-DIDependency-Injection저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)