Spring - Spring에서 의존관계와 DI
목록  
제 목 Spring에서 의존관계와 DI
작성자 박세청 작성일 2013/11/08 02:52



의존관계란 무엇일까? 아래 코드를 보자.
public class UserDAO {
    public UserDAO() {
        connectionMaker = new DConnectionMaker();
    }
}

UserDAO클래스는 DConnectionMaker클래스에 의존하고 있다. 이말은 무슨 말이냐...
DConnectionMaker클래스가 변경이 된다면 UserDAO클래스에도 그 영향이 미칠 수 있다는 것이다.
반대로 UserDAO클래스가 변경이 되면 DConnectionMaker클래스에는 영향이 갈까? 그렇지 않다. 
의존 관계에는 방향성이 있다. UserDAO클래스가 DConnenectionMaker에 의존하고 있지만, DConnectionMaker는 UserDAO에는 의존하지 않는다.

DConnectionMaker 가 변경이 되면 UserDAO가 많은 영향이 가게 될 것이다 (UserDAO도 같이 수정해주어야 할 경우도 많을 것이다.). 때문에 두 클래스는 매우 결합도가 높다라고 한다. 이러한 결합도를 낮추려면 두 클래스의 의존 관계를 끊어야 하는데, 이때 interface(abstract도 방법)를 통해 의존관계를 제한해 주면 된다.


이렇게 UserDAO와 DConnectionMaker와의 ConnectionMaker interface를 통해 의존관계를 분리시켜 주면 UserDAO는 ConnectionMaker interface만 의존하고 있기 때문에 DConnectionMaker에 어떠한 수정이 있어도 영향을 받지 않는다.
또, UserDAO클래스는 ConnectionMaker interface만 구현을 한 클래스라면 해당 클래스를 사용 가능해 진다.

여기에 이제 문제점이 하나 생긴다. interface를 통해 느슨한 의존관계를 갖는 경우에는 UserDAO의 오브젝트가 런타임시 어떠한 ConnectionMaker(DConnectionMaker?, NConnectionMaker?)를 사용하게 될지 미리 알 수가 없게 된다.

의존 관계 주입(DI)은 이렇게 구체적인 의존 오브젝트(UserDAO)와 그것을 사용할 주체(DConnectionMaker or NConnectionMaker)를 런타임시에 연결해 주는 작업을 말한다. 

이제 두 오브젝트(UserDAO와 DconnectionMaker or NConnectionMaker)의 관계를 도와주는 제 3의 존재가 필요하다. 
앞에서는 ApplicationContext가 DaoFactory를 이용하여 그 역할을 했었다.
2011/06/16 - [Framework/Spring] - AnnotationConfigApplicationContext를 이용해 Bean 가져오기.



저작자 표시




이전글 @Autowired
다음글 Spring Bean의 Scope

목록