Strategy Pattern

wangjh789·2022년 8월 31일
0

Design Pattern

목록 보기
5/13

전략패턴은 상속 (extends) 보다 구성(class fleid)에 의존한다.

상속은 단일 클래스만 확장할 수 있고, 컴파일 타임에 타입이 지정되므로 정적이다.
이와 반대로 구성은 관계로 이루어져 있고 런타임에 동작을 변경할 수 있어 유연하다는 장점을 가지고 있다.

전략패턴을 이용한 간단한 계산 어플리케이션

public interface Strategy {
    int execute(int num1, int num2);
}

public class Subtraction implements Strategy {
    @Override
    public int execute(int num1, int num2) {
        return num1- num2;
    }
}

public class Addition implements Strategy {
    @Override
    public int execute(int num1, int num2) {
        return num1 + num2;
    }
}

전략 인터페이스 구현체론 덧셈, 뺄셈 클래스가 있다.

public class OperationManager {

    private Strategy strategy;

    public void setStrategy(Strategy strategy) {
        this.strategy = strategy;
    }
    public int execute(int num1,int num2) {
        return this.strategy.execute(num1, num2);
    }

}

OperationManager는 strategy를 필드를 가지고 있는 구성 관계로 구현했다.

    public static void main(String[] args) {
        OperationManager manager = new OperationManager();

        manager.setStrategy(new Addition());
        int result = manager.execute(1, 2);

        System.out.println("result = " + result);
    }

클라이언트 코드에서 클라이언트가 전략(사용한 구현체)을 정하는 것을 볼 수 있는데 이는 클라이언트에게 분기를 위임한 것이다. (if문을 밖으로 밀어냄)

OperationManger 부분에 if문이나 instanceOf 가 등장하면 전략패턴을 사용하지 않은 것이다.
전략패턴은 구성을 이용해 런타임 시에 원하는 전략을 골라 사용할 수 있다는 장점이 있다.

profile
기록

0개의 댓글