[스프링 이해와 원리] 전략패턴 이란? 순서2 :: 잡다한 프로그래밍
반응형

1. 전략패턴이란?

 

전략패턴이란 동적으로 알고리즘을 교체할 수 있는 구조를 말한다. 알고리즘 인터페이스를 정의하고, 각각의 알고리즘 클래스별로 교체 사용 가능하게 한다. (앞선 Connectionmaker 인터페이스구조가 이에 해당)

 

 

2. 예시

만약 다음과 같은 delete예제가 있다고 할때 전략 패턴을 적용시켜보자.

다음과 같은 코드에서 변경될 부분은 ps = c.prepareStatement("delete from users"); 부분이다.

나머지 부분은 고정되어 있어야하니 Context에 해당하고 ps 부분이 전략 부분에 해당된다.

Connection c = null;
PreparedStatement ps = null;
try{
	c = dataSource.getConnection();
    
    ps = c.prepareStatement("delete from users");
    
    ps.executeUpdate();
} catch (SQLException e) {
	throw e;
} finally {
	...
}

 

StatementStrategy인터페이스

public interface StatementStrategy {
	PreparedStatement makePreparedStatement(Connection c) throws SQLException
}

 

DeleteStrategy

public class DeleteStrategy implemetns StatementStrategy {

	public PreparedStatement makePreparedStatement(Connection c) thorws SQLException {
    preparedStatement ps = c.preparedStatement("delete from users");
    return ps;
  	}
}

 

수정된 Context 부분

public void Context(StatementStrategy stmt) throws SQLException {
  Connection c = null;
  PreparedStatement ps = null;
  try{
      c = dataSource.getConnection();

      ps = stmt.makePreparedStatement(c);

      ps.executeUpdate();
  } catch (SQLException e) {
      throw e;
  } finally {
      ...
  }
}

 

Factory부분

public void Factory() throws SQLException {
	StatementStrategy st = new DeleteStrategy();
    Context(st);
}

 

3. 정리

앞선 UserDao와 같은 패턴으로 이루어져 있고 IOC와 DI모두 이해할 수 있다.

반응형

+ Recent posts