inblog logo
|
LHS's Study Space
    디자인패턴

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

    lhs's avatar
    lhs
    Nov 13, 2024
    [디자인 패턴] 4. 전략 패턴
    Contents
    1. 정의2. 잘못된 코드3. 좋은 코드4. 정리
    💡
    전략 패턴은 구체적인 것을 추상화해서 의존하는 기법이다.
     

    1. 정의

    전략 패턴(Strategy Pattern)은 행동 패턴(Behavioral Pattern) 중 하나로, 알고리즘을 객체로 캡슐화하여, 이 알고리즘을 사용하는 클라이언트 코드에서 동적으로 변경할 수 있도록 만드는 디자인 패턴이다. 즉, 클래스가 특정 알고리즘을 고정하지 않고, 여러 알고리즘을 독립적인 객체로 캡슐화하여, 런타임에 알고리즘을 자유롭게 교체할 수 있게 하는 디자인 패턴이다.

    2. 잘못된 코드

     
    // 쥐 Object public class Mouse { private String name = "쥐"; public String getName() { return name; } }
    Mouse.java
     
    public class Cat { private String name = "고양이"; public String getName() { return name; } }
    Cat.java
     
    // SRP -> Single Responsibility Principle public class Doorman { public void 쫓아내(Cat cat) { System.out.println(cat.getName() + "쫒아내"); } }
    Doorman.java
     
    public class App { public static void main(String[] args) { Doorman doorman = new Doorman(); Cat cat = new Cat(); doorman.쫓아내(cat); } }
    App.java

    3. 좋은 코드

     
    public abstract class Animal { String name; Animal(String name) { this.name = name; } public String getName() { return name; } }
    Animal.java
     
    public class Mouse extends Animal { public Mouse() { super("쥐"); } }
    Mouse.java
     
    public class Cat extends Animal { public Cat() { super("고양이"); } }
    Cat.java
     
    public class Doorman { // DIP -> Dependency Inversion Principle public void 쫓아내(Animal animal) { System.out.println(animal.getName() + "쫒아내"); } }
    Doorman.java
     
    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); } }
    App.java

    4. 정리

    1. 잘못된 코드
        • 쥐와 고양이 둘 다 쫓아내려면 문지기를 수정해야 해서 OCP를 위반한다.
    1. 좋은 코드
        • 문지기는 쫓아내는 역할만 해서 SRP를 준수한다.
        • 문지기는 추상클래스 Animal에만 의존하게 만들어 DIP를 준수한다.
        • 추상 클래스 Animal을 만들어서 OCP에 준수하게 개선했다.
    notion image
     
    Share article
    Contents
    1. 정의2. 잘못된 코드3. 좋은 코드4. 정리

    LHS's Study Space

    RSS·Powered by Inblog