전략 패턴은 구체적인 것을 추상화해서 의존하는 기법이다.
1. 정의
전략 패턴(Strategy Pattern)은 행동 패턴(Behavioral Pattern) 중 하나로, 알고리즘을 객체로 캡슐화하여, 이 알고리즘을 사용하는 클라이언트 코드에서 동적으로 변경할 수 있도록 만드는 디자인 패턴이다. 즉, 클래스가 특정 알고리즘을 고정하지 않고, 여러 알고리즘을 독립적인 객체로 캡슐화하여, 런타임에 알고리즘을 자유롭게 교체할 수 있게 하는 디자인 패턴이다.
2. 잘못된 코드
// 쥐 Object
public class Mouse {
private String name = "쥐";
public String getName() {
return name;
}
}
public class Cat {
private String name = "고양이";
public String getName() {
return name;
}
}
// SRP -> Single Responsibility Principle
public class Doorman {
public void 쫓아내(Cat cat) {
System.out.println(cat.getName() + "쫒아내");
}
}
public class App {
public static void main(String[] args) {
Doorman doorman = new Doorman();
Cat cat = new Cat();
doorman.쫓아내(cat);
}
}
3. 좋은 코드
public abstract class Animal {
String name;
Animal(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
public class Mouse extends Animal {
public Mouse() {
super("쥐");
}
}
public class Cat extends Animal {
public Cat() {
super("고양이");
}
}
public class Doorman {
// DIP -> Dependency Inversion Principle
public void 쫓아내(Animal animal) {
System.out.println(animal.getName() + "쫒아내");
}
}
public class App {
public static void main(String[] args) {
Doorman doorman = new Doorman();
Animal cat = new Cat();
Animal mouse = new Mouse();
doorman.쫓아내(cat);
doorman.쫓아내(mouse);
}
}
4. 정리
- 잘못된 코드
- 쥐와 고양이 둘 다 쫓아내려면 문지기를 수정해야 해서 OCP를 위반한다.
- 좋은 코드
- 문지기는 쫓아내는 역할만 해서 SRP를 준수한다.
- 문지기는 추상클래스
Animal
에만 의존하게 만들어 DIP를 준수한다. - 추상 클래스
Animal
을 만들어서 OCP에 준수하게 개선했다.

Share article