Dependency Injection, DI - 의존성 주입.
웹 & 안드로이드/JAVA & JSP2013. 10. 16. 15:31
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 |
댓글()