정책 패턴(Policy pattern) 이라도고 하며, 객체의 행위를 바꾸고 싶은 경우 직접
수정하지 않고 전략이라고 부르는 캡슐화한 알고리즘
을 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하게 만드는 패턴이다.
컨텍스트 : 프로그래밍에서 컨텍스트는 상황, 맥락, 문맥을 의미하며 개발자가 어떠한 작업을 완료하는 데 필요한 모든 관련 정보를 말한다.
전략패턴을 활용한 라이브러리
Node.js 에서 인증 모듈을 구현할 때 쓰는 미들웨어 라이브러리로, 여러 가지 전략
을 기반으로 인증이 가능함.
서비스 내의 회원가입된 아이디와 비밀번호를 기반으로 인증하는 LocalStrategy 전략과 페이스북, 네이버 등 다른 서비스를 기반으로 인증하는 OAuth 전략 등을 지원한다.
커피 머신
public interface CoffeeStrategy {
void brew();
}
public class AmericanoStrategy implements CoffeeStrategy {
private static final String AMERICANO = "아메리카노";
@Override
public String brew() {
// 아메리카노를 내리는 기능
return AMERICANO;
}
}
public class CafeLatteStrategy implements CoffeeStrategy {
private static final String CAFE_LATTE = "카페라떼";
@Override
public String brew() {
// 카페라떼를 내리는 기능
return CAFE_LATTE;
}
}
public class CoffeeMachine {
public String brew(CoffeeStrategy coffeeStrategy) {
return coffeeStrategy.brew();
}
}
public class Road {
public static void main(String[] args) {
// 도로 위에 커피머신을 설치합니다
CoffeeMachine coffeeMachine = new CoffeeMachine();
// 아메리카노 버튼을 누르면 아메리카노 전략을 넣어 아메리카노를 추출해줍니다
String americano = coffeeMachine.brew(americanoButton());
System.out.println(americano);
// 카페라떼 버튼을 누르면 카페라떼 전략을 넣어 카페라떼를 추출해줍니다
String cafelatte = coffeeMachine.brew(cafeLatteButton());
System.out.println(cafelatte);
}
public static CoffeeStrategy americanoButton() {
return new AmericanoStrategy();
}
public static CoffeeStrategy cafeLatteButton() {
return new CafeLatteStrategy();
}
}