[디자인 패턴] 전략 패턴 (Strategy Pattern)

KangHo Lee's avatar
Nov 13, 2024
[디자인 패턴] 전략 패턴 (Strategy Pattern)
💡
알고리즘을 정의하고 각각을 캡슐화하여 교체 가능하게 만드는 패턴

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

devleekangho