실행 중 알고리즘을 선택할 수 있게 하는 행위
객체가 수행하는 동작을 외부 여러 전략으로 분리하여, 실행 시점에 동작 선택 가능
사용 이유
- 동작의 분리
비슷한 기능이라도 구체적인 알고리즘이 다르기에, 코드 중복을 줄이면서 동작을 따로 정의
- 유연성 향상 새로운 동작을 추가하거나 기존 동작을 변경할 때 유연하게 대처가능
1. 잘못된 코드
public class App {
public static void main(String[] args) {
Doorman doorman = new Doorman();
Cat cat = new Cat();
doorman.쫓아내(cat);
}
}
// SRP -> Single Responsibility Principle 클래스는 단일책임을 가져야 한다
public class Doorman {
public void 쫓아내(Cat cat) {
System.out.println(cat.getName() + " 쫓아내");
}
}
public class Mouse {
private String name = "쥐";
public String getName() {
return name;
}
}
public class Cat {
private String name = "고양이";
public String getName() {
return name;
}
}
2. 좋은 코드
public class App {
public static void main(String[] args) {
Doorman doorman = new Doorman();
Cat cat = new Cat();
Mouse mouse = new Mouse();
doorman.쫓아내(cat);
doorman.쫓아내(mouse);
}
}
public abstract class Animal {
public abstract String getName();
}
// SRP(Single Responsibility Principle) 클래스는 단일책임을 가져야 한다
public class Doorman {
// DIP(Dependency Inversion Principle) 추상적인 의존(변화하지 않는 것에 의존)
public void 쫓아내(Animal animal) {
System.out.println(animal.getName() + " 쫓아내");
}
}
public class Mouse extends Animal {
private String name = "쥐";
@Override
public String getName() {
return name;
}
}
public class Cat extends Animal {
private String name = "고양이";
@Override
public String getName() {
return name;
}
}
Share article