전략패턴은 구체적인 것을 추상화해서 의존하는 기법이다.
오류코드
public class Cat {
String name = "고양이";
public String getName(){
return name;
}
}
public class Mouse {
String name = "쥐";
public String getName(){
return name;
}
}
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);
}
}
이 코드의 문제
- Doorman 클래스는 오로지 Cat 객체만 쫓아내는 쫓아내 메서드를 들고 있음. Mouse 등 다른 동물 객체를 쫓아내고 싶으면 매번 쫓아내 메서드를 새로 정의해야함.
전략패턴을 사용한 코드
abstract class Animal {
abstract String getName();
}
public class Mouse extends Animal {
String name = "쥐";
public String getName(){
return name;
}
}
public class Cat extends Animal {
String name = "고양이";
public String getName(){
return name;
}
}
//SRP -> Single Responsibility Principal
public class Doorman {
public void 쫒아내(Animal animal){
//DIP -> Dependency Inversion Principle
System.out.println(animal.getName()+" 쫓아내");
}
}
public class App {
public static void main(String[] args) {
Doorman doorman = new Doorman();
Mouse mouse = new Mouse();
Cat cat = new Cat();
doorman.쫒아내(mouse);
doorman.쫒아내(cat);
}
}
전략패턴 사용
- 추상 클래스로 Animal 클래스를 생성하여 Cat, Mouse 클래스에 상속
- Doorman 클래스는 Animal 추상 클래스를 통해 Cat, Mouse를 쫓아낼 수 있다.
Share article