전략 패턴(Strategy Pattern)은 객체 지향 설계 원칙 중에서
추상화에 의존해야 하며, 구체적인 것에 의존해서는 안 된다
는 원칙을 잘 구현한 디자인 패턴입니다.
이 패턴을 통해 다양한 알고리즘을 정의하고, 필요에 따라 적절한 알고리즘을 선택할 수 있습니다. 이로 인해 코드의 유연성과 확장성이 높아지고, 유지보수가 쉬워집니다.전략 패턴에서는 행동을 정의하는 여러 알고리즘이 각각 별도의 클래스에서 구현됩니다.
이러한 알고리즘은 공통된 인터페이스나 추상 클래스를 통해 정의되며, 클라이언트 코드에서는 이 추상화된 인터페이스(혹은 추상 클래스)만을 참조합니다
새로운 요구 사항이나 기능 변경이 있을 때 추상 클래스나 인터페이스를
구현하는 구현 객체만 갈아끼워주면 기존의 코드를 변경하지 않아도 됩니다.
public abstract class Animal {
public abstract String getName();
}
public class Mouse extends Animal {
private String name = "쥐";
@Override
public String getName() {
return name;
}
}
public class Dog extends Animal {
private String name = "개";
@Override
public String getName() {
return name;
}
}
public class Doorman {
public void expel(Animal m) {
System.out.println(m.getName() + " 쫓겨났다.");
}
}
public class App {
public static void main(String[] args) {
Doorman dm = new Doorman();
Mouse m1 = new Mouse();
dm.expel(m1);
Tiger t1 = new Tiger();
dm.expel(t1);
}
}
위 코드에서는 Doorman 클래스가 Animal 타입에 의존하고 있으며,
실제로 어떤 동물을 쫓아낼지는 런타임 실행시점에 결정할 수 있습니다.
이는 전략 패턴의 기초가 되는 개념입니다.
다양한 동물(예: Mouse, Tiger)을 쫓아내기 위해 Doorman 클래스를 수정할 필요가 없으며
단지 새로운 Animal 구현체만 추가하면 됩니다.
Share article