1. 의존이란?
A 클래스에서 B 클래스의 method를 실행할 때 이를 의존한다고 표현한다.
어떻게 B 클래스의 method를 실행하는가?
- A 클래스에서 B 객체를 생성해서 필드에 할당한다.
- 이 경우 유지보수 관점에서 문제점을 유발할 수 있다.
2. DI (Dependency Injection)
DI는 의존하는 객체를 직접 생성하지 않고 생성자를 통해 전달 받는다.
public class MemberResgisterService {
public MemberRegisterService(MemberDao memberDao) {
this.memberDao = memberDao;
}
}
DI를 적용한 MemberRegisterService 클래스는 객체를 생성할 때 생성자에 MemberDao 객체를 전달해야 한다.
MemberRegisterService svc = new MemberRegisterService(memberDao);
3. DI와 의존 객체 변경의 유연함
DI를 적용하지 않고 클래스에서 의존하는 클래스를 직접 생성하는 경우 의존하는 클래스가 변경되었을 때 그 클래스를 사용하는(의존하는) 모든 클래스의 코드를 수정해야한다.
DI를 적용한 경우 의존 대상이 되는 객체를 생성하는 코드만 수정하면 된다.
4. 인터페이스를 통한 객체 주입
Reference - https://mangkyu.tistory.com/150
public interface Product {
}
public class Pencil implements Product {
}
public class store {
private Product product;
public Store(Product product) {
this.product = product;
}
}
Product 인터페이스를 이용하여 Store 에서 product 객체를 주입받는다.
public class BeanFactory {
public void store() {
// Bean 생성
Product pencil = new Pencil();
// 의존성 주입
Store store = new Store(pencil);
}
}
pencil 객체를 생성하여 그 객체를 Store로 주입한다.
Store에서 판매하는 객체가 pencil이 아니라 다른 상품으로 변경한다면 pencil 객체 생성하는 부분만 수정하면 된다.
이런 의존 주입 방법은 상속보다 유연하다.
'Spring' 카테고리의 다른 글
Ch.2 스프링 시작하기 (0) | 2022.04.09 |
---|---|
스프링 공부를 위한 개발 환경 세팅! (0) | 2022.02.22 |