[디자인 패턴] 1. 전략 패턴

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

오류코드

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

송승현의 블로그