-토니의 스프링 책참고
위 경우의 해결책은 두개의 클래스가 서로 긴밀하게 연결되어 있지 않도록 중간에 추상적인 느슨한 연결고리를 만들어주는 것이다.추상화란 어떤 것들의 공통적인 성격을 뽑아내어 이를 따로 분리해내는 작업이다.자바가 추상화를 위해 제공하는 가장 유용한 도구는 바로 인터페이스이다.

인터페이스의 최대장점은 추상화가 되는 동시에 실제 이걸이용해서 구현하는 클래스는 밑 바탕 클래스를 몰라도 된다.. 이 바탕 클래스가 별 스트립쇼를 부리든 난동을 부리든.. 인터페이스만 신경쓰면 된다.

아래는 인터페이스 설정이다.
public interface ConnectionMaker {
public Connection makeNewConnection() throws ClassNotFoundException,SQLException;
}

그리고 이걸 실제 독자적으로 구현하는 고객 클래스는 

-D사
public class DConnectionMaker implements ConnectionMaker {

@Override
public Connection makeNewConnection() throws ClassNotFoundException,
SQLException {
return null;// D사가 개별적으로 생성한 커넥션;
}

}
-N사
public class NConnectionMaker implements ConnectionMaker {

@Override
public Connection makeNewConnection() throws ClassNotFoundException,
SQLException {
return  null;// N사가 개별적으로 생성한 커넥션;
}

}

이고..바탕클래스에선 이 인터페이스를 이용해 이렇게 작성할 수 있다.하지만 문제점이 있는데 빨간 줄로 된 걸 보면 된다.

-바탕클래스 : UserDao

private ConnectionMaker connectionMaker;
public UserDao(){
//초기화 ID 및 PASSWORD
connectionMaker = new DConnectionMaker();
}
public void add(User user) throws ClassNotFoundException,SQLException{
Connection c = connectionMaker.makeNewConnection();
.....

저 코드를 보면 결국 클라이언트 구현클래스를 이용해서 UserDao를 구현하고 있다.

결국 UserDao의 완전 독립이라는 나의 최종목표에서 벗어나 버렸다.

그래서 다음 단계인 "관계설정 책임의 분리"에서 해결해보자.



+ Recent posts