Dependency Injection, DI - 의존성 주입.

http://cafe.naver.com/jjdev/247

1. 의존성 주입


 - 의존성 주입(Dependency Injection, DI) : 어느 A객체를 필요로 하는 B객체는 A객체에 의존성을 가지고 있다. 필요로 하는 객체를 소스코드로 직접 객체 생성을 구현하지 않고, 다른 방법으로 객체를 주입 시켜주는 것. 마틴파울러는 세 가지의 의존성 주입패턴을 제시하였다.


* 생성자 주입 : 필요한 의존성을 모두 포함하는 클래스의 생성자를 만들고 그 생성자를 통해 의존성을 주입한다.

* Setter를 통한 주입 : 의존성을 입력받는 세터(Setter) 메소드를 만들고 이를 통해 의존성을 주입한다.

* 인터페이스를 통한 주입 : 의존성을 주입하는 함수를 포함한 인터페이스를 작성하고 이 인터페이스를 구현하도록 함으로써 시에 이를 통하여 의존성을 주입한다.



1. 인터페이스 구현.


1
2
3
4
5
6
7
8
9
10
11
//인터페이스.
public interface Dao {
    public void getList();
}
//인터페이스 Dao를 구현한 OracleDao.
public class OracleDao implements Dao{
    @Override
    public void getList(){
        System.out.println("OracleDao.getList() - Oracle DB에 접근합니다.");
    }
}


 1
2
3
4
5
6
7
8
public class OracleService{
    public void getList(){
        System.out.println("OracleService.getList() - OracleDao.GetList() 를 호출합니다.");
        Dao dao = new OracleDao();
          dao.getList();
        System.out.println("OracleService.getList() - Dao에서 데이터를 받아 Controller에게 넘져줍니다.");
    }
}


- dao는 OracleDao객체가 되었다. 만약 OracleDao의 클래스명칭이 변경 되었을때 하나만 변경하면 된다.


2. Setter.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class ListController {
    public void doGet(){
        System.out.println("Controller - OracleService를 호출합니다.");
          OracleService service = new OracleService();
          service.serDao(new OracleDao()); //setter를 통해 서비스에 Dao를 주입 시켜주었다.
        service.getList();
        System.out.println("Controller - Service에서 데이터를 받아 View에 넘겨줍니다.");
    }
}
    
public class OracleService{
   Dao dao;
 
   public void setDao(Dao dao){
   this.dao = dao;
   }
 
    public void getList(){
        System.out.println("OracleService.getList() - OracleDao.GetList() 를 호출합니다.");
          dao.getList();
        System.out.println("OracleService.getList() - Dao에서 데이터를 받아 Controller에게 넘져줍니다.");
    }
}

 


- ListController에서 Service를 생성할때 Dao를 주입 시켜주었다.

Service에는 Dao를 생성하지 않아도 직접 생성한 것과 같은 결과가 나온다.

즉, Service와 Dao를 동시에 구현을 할때 Dao가 전부 구현할 때 가지 Service는 기다리지 않아도(먼저 구현이 끝나도), 혹은 Dao가 변경되더라도 따로 Service를 수정 할 필요가 없다는 것이다.


3.생성자를 이용.


-Setter와 동일. service를 생성할때 dao를 주입 시키면 된다.


'웹 & 안드로이드 > JAVA & JSP' 카테고리의 다른 글

Maven  (0) 2013.10.18
Transaction(트랜젝션) - 어떠한 과정을 한 묶음으로 처리하는 것.  (0) 2013.10.17
Collection - List 배열, Set 셋  (0) 2013.10.15
쓰레드  (0) 2013.10.14
디자인 패턴  (0) 2013.10.14

댓글()