[디자인패턴] 전략패턴

이나겸's avatar
Nov 12, 2024
[디자인패턴] 전략패턴
💡
전략패턴은 구체적인 것을 추상화해서 의존하는 기법

[Doorman이 고양이나 쥐를 만나면 쫓아내는 동작을 하도록 구현하기]

1. 잘못된 코드

💡
문지기(Doorman)가 고양이(Cat)에 의존하기 때문에, 쥐(Mouse)로 변경하면 기존 코드를 수정해야 함
⇒ OCP 위배
 
package ch01; // 쥐 Object public class Mouse { private String name = "쥐"; // private 변수라 접근 불가능해서 // 갖다쓰려면 getter 이용 public String getName() { return name; } } package ch01; public class Cat { private String name = "고양이"; // private 변수라 접근 불가능해서 // 갖다쓰려면 getter 이용 public String getName() { return name; } } package ch01; // srp (Single Responsibility Principle) // 하나의 클래스는 하나의 책임을 가지는게 좋다 (의무가 아니라 권장) public class Doorman { // 이 클래스의 책임 public void 쫓아내(Cat cat) { System.out.println(cat.getName() + "쫓아내"); } } package ch01; public class App { public static void main(String[] args) { Doorman doorman = new Doorman(); Cat cat = new Cat(); doorman.쫓아내(cat); } }
 

2. 좋은 코드

💡
Animal 클래스를 만들고, 추상화해서 해결

srp (Single Responsibility Principle)

  • 하나의 클래스는 하나의 책임을 가지는게 좋다 (의무가 아니라 권장)

DIP (Dependency Inversion Principle)

  • 의존성 역전 원칙
  • 구체적인 것(Object)에 의존하지말고 추상적인것(Animal)에 의존하라
package ch01; // 추상 클래스 => 상속 가능 public abstract class Animal { public abstract String getName(); } package ch01; // 쥐 Object // Animal 상속 public class Mouse extends Animal{ private String name = "쥐"; // 부모와의 동일 메소드 오버라이드 public String getName() { return name; } } package ch01; // 고양이 Object // Animal 상속 public class Cat extends Animal { private String name = "고양이"; // 부모와의 동일 메소드 오버라이드 public String getName() { return name; } } package ch01; // srp (Single Responsibility Principle) // 하나의 클래스는 하나의 책임을 가지는게 좋다 (의무가 아니라 권장) public class Doorman { // DIP (Dependency Inversion Principle, 의존성 역전 원칙) // 구체적인것(Mouse, Cat)에 의존하지말고 추상적인것(Animal)에 의존하라 // 이 클래스의 책임 public void 쫓아내(Animal animal) { System.out.println(animal.getName() + " 쫓아내"); } } package ch01; 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); } }
Share article

Nakyeom's Study