의존 객체 관리
MemberListController => 멤버의 출력을 담당하는 컨트롤러, MemberDao => 멤버의 데이터베이스 관리를 담당하는 모델
예를들어,
MemberListController가 작업을 수행하려면 데이터베이스로부터 회원 정보를 가져다줄
MemberDao가 필요합니다. 이렇게 특정 작업을 수행할 때 사용하는 객체를 "의존객체"라고 하고,
이런 관계를 "의존 관계(Dependency)"라고 한다.
의존객체를 필요할 때마다 생성하는 고전적인 방법, 외부에서 의존객체를 주입해주는 비교적 최근의 방법 등이 있다.
의존 객체와의 결합도 증가에 따른 문제
1) 코드의 잦은 변경
객체를 사용하는 쪽에서 결합도가 높아져 의존 객체나 보관소에 변경이 발생하면 바로 영향을 받는다.
2) 대체가 어렵다
의존 객체를 다른 객체로 대체하기가 쉽지 않다. MySQL을 사용하다가 oracle DB로 바꾸게 되면 일부 SQL문을 수정해야 한다.
다른 방법으로는 데이터베이스별로 DAO를 준비하는 것이다.
인터페이스와 보관소를 이용하여 DAO를 보다 쉽게 교체하게 만들 순 있지만, 이방식으로도 보관소에 종속되는 문제를 피할 순 없다.
의존 객체를 외부에서 주입
우리 사회는 자급자족이 아니라 남이 만든 것을 가져다 쓴다. 노트북도 우리가 만들었나? 아니다.
방법은 의존 객체를 전문으로 관리하는 "빈 컨테이너(Java Beans Container)"를 사용하는 것
(빈 컨테이너라는 개념은 스프링에서 사용하는 개념입니다. 빈 = 객체라고 보면 됨)
빈 컨테이너는 객체가 실행되기 전에 그 객체가 필요로 하는 의존 객체를 주입해주는 역할을 수행
이런 방식으로 의존 객체를 관리한느 것을 "의존성 주입(DI : Dependency Injection)"이라 합니다.
일반적인 말로는 "역제어(IoC : Inversion of Control)"라고 부릅니다.
인터페이스를 이용한 결합도 감소 방법
위의 그림과 같이 의존 객체를 사용 할 때 구체적으로 클래스 이름을 명시하는 대신 인터페이스를 사용하면,
그 자리에 다양한 구현체(인터페이스를 구현한 클래스)를 놓을 수 있음. 즉 인터페이스라는 문법으로 DAO가
갖춰야 할 규격을 정의하고, 그 규격을 준수하는 클래스라면 어떤 클래스를 상속 받았는지 따지지 않고
허용하는 것.
'ServletJDBC' 카테고리의 다른 글
프런트 컨트롤러(Front Controller) (0) | 2015.08.05 |
---|---|
DB커넥션풀 - DB Connection Pool (0) | 2015.07.20 |
DI 와 IoC (0) | 2015.07.20 |
DAO - Data Access Object (0) | 2015.07.20 |
서블릿 데이터 보관소 (0) | 2015.07.20 |