- 전략 패턴이란?
- 다양한 전략을 바꿔가며 해결하는 패턴
- 인터페이스와 위임을 사용해 특정 기능 변경을 할 때 사용하는 패턴
- 위임으로 IOC(제어의 역전), 인터페이스로 OCP를 만족할 수 있다.
- 언제 쓰는가?
- 게임에서 무기를 선택할때 칼,창,도
- 등급 할인 정책
- 자바에서 쓰이는 경우
- Collections#sort()
- javax.servlet.http.HttpServlet
- javax.servlet.Filter#doFilter()
- 장점
- Context의 변경 없이 새 전략을 추가할 수 있다.
- 확장에 유리한 코드 작성
- 단점
- 클래스로 분리한 각 전략들이 어느 상황에 사용되는지 알아야 함.
- 구체 클래스에선 인터페이스에 있는 메서드를 쓰지 않을 수도 있기에 비효율적일 수 있다.
- 구현해보기
상황: PM, 개발자, 개발 도구 전략 2가지(이클립스, 인텔리제이)
- 레거시가 익숙한 PM은 이클립스를 이용한 개발을 지시한다..
- PM이 이클립스 사용
- 요구 사항이 바뀌어 인텔리제이로의 전환을 지시한다
- 전략 패턴으로 구현했기 때문에 코드 수정없이 전환이 가능해진다
Strategy
public interface Strategy {
String useTool();
}
public class StrategyEclipse implements Strategy{
@Override
public String useTool() {
return "Use Eclipse";
}
}
public class StrategyIntelij implements Strategy{
@Override
public String useTool() {
return "Use Intelij";
}
}
Develop(Context)
public class Developer {
private Strategy strategy;
public Developer(Strategy strategy) {
this.strategy = strategy;
}
public String choose() {
return "Developer choose a tool -> " + strategy.useTool();
}
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
}
Manager
public class Manager {
public static void main(String[] args) {
Developer developer = new Developer(new StrategyEclipse());
System.out.println(developer.choose());
//전환 지시
developer.setStrategy(new StrategyIntelij());
System.out.println(developer.choose());
}
}
- 스프링에서 전략 패턴
JDBC의 DB Connection 단계에서 전략 패턴이 활용된다.
DataSourceBuilder에 DB 설정 정보들이 들어가 있는 것으로 보인다.
프로젝트에서 H2, Postresql을 써서 저렇게 나오는 것 같다
우측 사진이 전략 패턴을 구성하는 JDBC Interface로 보여진다.
'기술면접 > 디자인 패턴' 카테고리의 다른 글
[디자인 패턴] 커맨드 패턴 (0) | 2022.04.05 |
---|---|
[디자인 패턴] 싱글톤 패턴 (0) | 2022.04.01 |
[디자인 패턴] 프록시 패턴이란? (0) | 2022.03.22 |
댓글