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

+ Recent posts