inblog logo
|
sxias
    디자인패턴

    [디자인패턴] 1. Strategy Pattern

    문정준's avatar
    문정준
    Jul 21, 2025
    [디자인패턴] 1. Strategy Pattern
    Contents
    Strategy Pattern성을 지키는 문지기 vs 동물Strategy Pattern의 장점

    Strategy Pattern

    • 각 객체가 할 수 있는 행위에 대한 클래스 생성
    • 클래스들을 포괄하는 인터페이스 (추상 클래스) 생성
    • 전략만 수정해줌으로써 행위를 유연하게 확장할 수 있음
     

    성을 지키는 문지기 vs 동물

    • 문지기 : 동물들을 쫓아내는 행위(책임)
    public class Doorman { public void getOut() {} }
    • 동물 : 쥐, 호랑이, 고양이
    public class Mouse { private String name = "쥐"; public String getName {return name;} } public class Tiger { private String name = "호랑이"; public String getName {return name;} } public class Cat { private String name = "고양이"; public String getName {return name;} }
     

    Q1. 문지기가 쥐를 쫓아내려면?

    • 쫓아내는 메서드의 대상에 쥐를 추가
    public class Doorman { public void getOut(Mouse m) { System.out.println(m.getName() + " 나가!"); } } public class App { public static void main(String[] args) { Mouse m1 = new Mouse(); Doorman d1 = new Doorman(); d1.쫓아내(m1); } }
     

    Q2. 문지기가 호랑이도 쫓아내려면?

    • 문지기는 현재 쥐만 쫓아낼 수 있음 : 두 가지 방법이 존재
      • 메서드 오버로딩 : 메서드에 책임(호랑이)을 추가 (매개변수만 바꾸어 추가로 사용 가능)
        • 추가할 책임의 수량이 한정적일 때만 사용 가능, 추적이 어려움
        public class Doorman { public void getOut(Mouse m) { System.out.println(m.getName() + " 나가!"); } public void getOut(Tiger t) { System.out.println(t.getName() + " 나가!"); } // ... 개수가 많아지면 계속 추가해야 함 (추적이 어려움) }
      • 추상 메서드를 의존 : 전략 패턴
        • 책임이 추상 메서드를 상속받기만 하면 코드를 더 수정할 필요가 없음 : DIP 원칙
      • 추상 메서드로 만드는 이유 : 부모의 메서드는 재정의로 인해 무효화, 즉 구현할 필요가 없음
      • abstract class Animal { abstract String getName(); } public class Doorman { public void getOut(Animal animal) { System.out.println(animal.getName() + " 나가!"); } }
     

    A : 코드 자체는 똑같으나, 전략 패턴을 사용하면 관리가 훨씬 유용해짐.

    public class App { public static void main(String[] args) { Mouse m1 = new Mouse(); Doorman d1 = new Doorman(); d1.쫓아내(m1); Tiger t1 = new Tiger(); d1.쫓아내(t1); } }
     

    Q3. 문지기가 고양이도 쫓아내려면?

    • 전략 패턴을 사용하면, 문지기는 할 것이 없음 (코드 수정 X)
    • 고양이가 동물을 상속받기만 하면 됨
    • OCP 원칙 충족
    public class Cat extends Animal { private String name = "고양이"; public String getName() {return name;} // 상태 확인 (변경 X) } public class App { public static void main(String[] args) { Mouse m1 = new Mouse(); Doorman d1 = new Doorman(); d1.쫓아내(m1); Tiger t1 = new Tiger(); d1.쫓아내(t1); Cat c1 = new Cat(); d1.쫓아내(c1); } }
     

    Strategy Pattern의 장점

    • SOLID 원칙의 O(OCP), D(DIP)가 충족됨
      • OCP (Open-Closed Principle) = 수정할 코드만 수정하고, 기존 코드는 건드리지 않음
      • DIP (Dependency Inversion Principle) = 추상적인 개념에 의존함
    • Doorman이 getOut의 책임만 가질 경우, SRP도 충족 가능
      • SRP (Single Responblility Principle) = 하나의 객체는 하나의 책임만 가져야 함
     
    notion image
    Share article
    Contents
    Strategy Pattern성을 지키는 문지기 vs 동물Strategy Pattern의 장점

    Sxias ㆍ a32176740@gmail.com

    RSS·Powered by Inblog