클래스의 분리

public class ConnectionMaker{
	public Connection getConnection(){
		// Connection 반환
	}
}

public class UserDao{
	private ConnectionMaker connectionMaker;
	public void add(){
		Connection c = connectionMaker.getConnection();
		// 적절한 코드
	}
	public User get(String id){
		Connection c = connectionMaker.getConnection();
		// 적절한 코드
	}
}

단점

  1. 확장성이 낮음.
  2. UserDao를 사용하는 다른 코드에서 getConnection()이 아닌 다른 이름의 메소드를 사용할 경우, 문제가 발생

인터페이스 사용하기

public interface ConnectionMaker{
	public Connection getConnection();
}

public class DConnectionMaker implements ConnectionMaker{
	public Connection getConnection(){//적절한 코드}
}

public class UserDao(){
	private ConnectionMaker connectionMaker;
	
	public UserDao(){
		this.connectionMaker = new DConnectionMaker();
	}
}

단점

관계 설정 책임의 분리

public interface ConnectionMaker{
	public Connection getConnection();
}

public class DConnectionMaker implements ConnectionMaker{
	public Connection getConnection(){//적절한 코드}
}

public class UserDao(){
	private ConnectionMaker connectionMaker;
	
	// 다형성에 따라서 connectionMaker에 ConnectionMaker의 구현체를 받아줄 수 있다.
	public UserDao(ConnectionMaker connectionMaker){
		this.connectionMaker = connectionMaker;
	}
}