기존에 프로젝트 DB로 MySQL을 채택한 상황에서 MSSQL을 사용해야 될 때는 어떻게 해야 할까? 확장성을 고려하지 않고 그저 기능 구현에만 집중한 코드를 사용했을 경우 전체적으로 코드를 수정해야 한다. 이러한 경우 개방 폐쇄 원칙에 위배가 되므로 처음 코드를 구현할 때 확장성에 대해 잘 계획하여야 한다.
팩토리 메서드 패턴
객체 구현을 담당하는 클래스를 따로 두어 결합도를 낮추는 방법이다.
구현
아래 코드는 간단한 예제를 보여주기 위한 코드로 실제 작동은 되지 않는다.
public interface ConnectorFactory{
public Connection connect();
}
ConnectorFactory는 Creator로 볼 수 있고 User는 interface의 매개변수와 함수 이름을 통해 구체적인 구현 코드를 분석하지 않고도 기능을 파악하여 사용가능하다. interface를 사용하지 않고 Class를 사용하여도 구현 가능하다.
class MySQLConnector extends ConnectorFactory{
public Connection connect(){
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection("url", "user", "password");
return conn;
}
}
class MSSQLConnector extends ConnectorFactory{
public Connection connect(){
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
return conn;
}
}
실제 Connector 구현 부분은 ConcreteCreator 라고 할 수 있다.
ConnectorFactory connectorFactory = new MySQLConnector();
Connection connection = connectorFactory.connect();
ConnectorFactory connectorFactory = new MSSQLConnector();
Connection connection = connectorFactory.connect();
실제 사용시에는 ConnectorFactory의 생성자 부분만 바꿔주며 사용가능하다. 사실 이 부분도 코드의 수정이 일어났기 때문에 개방 폐쇄 원칙에 위배된다. 이 부분도 외부에서 의존성을 주입해주면 해결이 가능하긴 하다.
장점
- 개방 폐쇄 원칙을 지켜서 확장에 용이하다.
단점
- 확장이 되지 않은 상태에서 단순히 기능만 구현하는 것보다 복잡하다.
- 확장이 되면 될 수록 관리해야 하는 Class 수가 늘어난다.
'디자인 패턴' 카테고리의 다른 글
[디자인 패턴] 빌더 패턴(Builder pattern) (0) | 2023.02.28 |
---|---|
[디자인 패턴] 템플릿 메서드 패턴(Template Method Pattern) (0) | 2023.02.24 |
[디자인 패턴] 싱글톤 패턴(Singleton pattern) (0) | 2023.02.14 |