알고리즘을 정의하고 각각을 캡슐화하여 교체 가능하게 만드는 패턴
1. 잘못된 코드
문지기가 고양이(Cat)에 의존하기 때문에 쥐(Mouse)로 변경하면 기존 코드를 수정해야 한다. → OCP 위배!
package ch01;
// SRP -> Single Responsibility Principle, 단일 책임 원칙
public class Doorman {
public void 쫓아내(Cat cat) {
System.out.println(cat.getName()+" 쫓아내");
}
}
package ch01;
// 고양이
public class Cat {
private String name = "고양이";
public String getName() {
return name;
}
}
package ch01;
// 쥐
public class Mouse {
String name = "쥐";
public String getName() {
return name;
}
}
package ch01;
// main
public class App {
public static void main(String[] args) {
Doorman doorman = new Doorman();
Cat cat = new Cat();
doorman.쫓아내(cat);
}
}
2. 좋은 코드
abstract class Animal과 abstract method getName() 작성
package ch01;
// DIP(Dependency Inversion Principle)
public abstract class Animal {
abstract String getName();
}
package ch01;
// 쥐
public class Mouse extends Animal {
private String name = "쥐";
public String getName() {
return name;
}
}
package ch01;
// 고양이
public class Cat extends Animal {
private String name = "고양이";
public String getName() {
return name;
}
}
package ch01;
// SRP(Single Responsibility Principle)
public class Doorman {
public void 쫓아내(Animal animal) {
System.out.println(animal.getName()+" 쫓아내");
}
}
package ch01;
// main
public class App {
public static void main(String[] args) {
Doorman doorman = new Doorman();
Mouse mouse = new Mouse();
Cat cat = new Cat();
doorman.쫓아내(cat);
doorman.쫓아내(mouse);
}
}
Share article