전략 패턴(Strategy Pattern)

구교석·2024년 4월 3일
post-thumbnail

전략 패턴(Strategy Pattern)은 행동 패턴 중 하나로
행동 패턴은 주로 객체 간의 상호작용에 초점을 맞춥니다. 이러한 상호작용은 객체들이 서로 메시지를 전송하고 그에 따라 동작을 변경하거나 실행하는 방식을 나타냅니다. 행동 패턴은 이러한 객체 간의 상호작용을 효율적으로 설계하기 위한 다양한 전략과 구조를 제공합니다.

전략 패턴이란?

전략 패턴은 실행(런타임) 중에 알고리즘 전략을 선택하여 객체 동작을 실시간으로 바뀌도록 할 수 있게 하는 행위 디자인 패턴 이다.
여기서 '전략'이란 일종의 알고리즘이 될 수 도 있으며, 기능이나 동작이 될 수도 있는 특정한 목표를 수행하기 위한 행동 계획을 말한다.
한마디로 어떤 일을 수행하는 알고리즘이 여러가지 일때, 동작들을 미리 전략으로 정의함으로써 손쉽게 전략을 교체할 수 있는, 알고리즘 변형이 빈번하게 필요한 경우에 적합한 패턴이다.

전략 패턴 구조

전략 알고리즘 객체들

알고리즘, 행위, 동작을 객체로 정의한 구현체

전략 인터페이스

모든 전략 구현제에 대한 공용 인터페이스 

컨텍스트(Context)

알고리즘을 실행해야 할 때마다 해당 알고리즘과 연결된 전략 객체의 메소드를 호출.

클라이언트

특정 전략 객체를 컨텍스트에 전달 함으로써 전략을 등록하거나 변경하여 전략 알고리즘을 실행한 결과를 누린다.

전략 패턴 코드

// 전략(추상화된 알고리즘)
interface IStrategy {
    void doSomething();
}

// 전략 알고리즘 A
class ConcreteStrateyA implements IStrategy {
    public void doSomething() {}
}

// 전략 알고리즘 B
class ConcreteStrateyB implements IStrategy {
    public void doSomething() {}
}
// 컨텍스트(전략 등록/실행)
class Context {
    IStrategy Strategy; // 전략 인터페이스를 합성(composition)
	
    // 전략 교체 메소드
    void setStrategy(IStrategy Strategy) {
        this.Strategy = Strategy;
    }
	
    // 전략 실행 메소드
    void doSomething() {
        this.Strategy.doSomething();
    }
}
// 클라이언트(전략 교체/전략 실행한 결과를 얻음)
class Client {
    public static void main(String[] args) {
        // 1. 컨텍스트 생성
        Context c = new Context();

        // 2. 전략 설정
        c.setStrategy(new ConcreteStrateyA());

        // 3. 전략 실행
        c.doSomething();

        // 4. 다른 전략 설정
        c.setStrategy(new ConcreteStrateyB());

        // 5. 다른 전략 시행
        c.doSomething();
    }
}

참고 사이트


전략 패턴 (Strategy Pattern)
💠 전략(Strategy) 패턴 - 완벽 마스터하기

profile
끊임없이 노력하는 개발자

0개의 댓글