전략 패턴은 변하는 행위를 클래스로 캡슐화 하여 동적으로 자유롭게 변경 가능하도록 도와주는 패턴 이다.
쉽게 말하면 기능이 추가나 수정이 되었을때 그 기능을 사용하는 클래스를 변경하지 않고 클래스로 캡슐화 하여 개방폐쇄원칙을 아주 잘 지키고 있는 패턴이다.
그러면 축구 프리킥 예제를 가지고 패턴 설명을 하겠다.
Kick클래스는 프리킥을 차기 위해 여러가지 종류의 킥을 받아서 프리킥을 찬다.
public class Kick {
private FreeKick freeKick;
public void setFreeKick(FreeKick freeKick) {
this.freeKick = freeKick;
}
public void freekick() {
System.out.println(freeKick.kick());
}
}
프리킥 인터페이스를 정의하고
public interface FreeKick {
String kick();
}
프리킥의 킥 종류를 구현 한다.
public class InsideKick implements FreeKick {
@Override
public String kick() {
return "inside kick";
}
}
그러면 아래와 같이 원하는 종류의 킥으로 프리킥을 찰 수가 있다.
public class FreeKickMain {
public static void main(String[] args) {
Kick kick = new Kick();
kick.setFreeKick(new InsideKick());
kick.freekick();
kick.setFreeKick(new OutsideKick());
kick.freekick();
}
}
또한 무회전 킥을 연습하여 무회전 킥이 추가 되었다고 한다면 Kick을 차는 비즈니스 로직은 수정하지 않고도 추가할 수 가 있다.
그러면 다음 시간에는 다른 곳에서는 어떻게 전략 패턴이 쓰이는지 알아보겠다.