전략 패턴은 객체 지향 디자인 패턴 중 하나로, 특정한 계산이나 행동을 캡슐화해 객체의 형태로 만든다. 이 패턴은 알고리즘을 클래스의 구조로 만들고, 이를 필요에 따라 쉽게 교체할 수 있게 해준다.

전략 패턴은 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다. 이 패턴은 알고리즘, 데이터 구조 등을 캡슐화하여 독립적으로 운용하게 해준다. 이를 통해 코드의 유연성을 증가시키고, 유지 보수를 용이하게 한다.

전략 패턴은 주로 세 가지 구성 요소로 이루어져 있다:

  1. 전략(Strategy): 인터페이스나 추상 클래스를 사용해 알고리즘을 정의한다. 여러 개의 알고리즘 클래스가 이를 구현할 수 있다.
  2. 전략 구현체(Concrete Strategy): 알고리즘을 구체적으로 구현한 클래스다. 이들 클래스는 실제로 실행할 알고리즘을 정의한다.
  3. 콘텍스트(Context): 전략을 사용하는 클래스다. 클라이언트가 콘텍스트에게 원하는 전략을 설정하면, 콘텍스트는 해당 전략을 실행한다.

자바에서의 전략 패턴 예제를 살펴보자:

// 전략 인터페이스
public interface MovingStrategy {
    public void move();
}

// 전략 구현체
public class WalkingStrategy implements MovingStrategy {
    public void move() {
        System.out.println("걷는다.");
    }
}

public class RunningStrategy implements MovingStrategy {
    public void move() {
        System.out.println("달린다.");
    }
}

// 콘텍스트
public class Character {
    private MovingStrategy strategy;

    public Character(MovingStrategy strategy) {
        this.strategy = strategy;
    }

    public void setStrategy(MovingStrategy strategy) {
        this.strategy = strategy;
    }

    public void move() {
        strategy.move();
    }
}

이 예제에서 Character 클래스는 캐릭터를 나타내며, MovingStrategy를 통해 캐릭터의 이동 방식을 정의한다. 이동 방식은 WalkingStrategyRunningStrategy로 변경할 수 있다.

public class Main {
    public static void main(String[] args) {
        Character character = new Character(new WalkingStrategy());
        character.move();  // Output: 걷는다.
        
        character.setStrategy(new RunningStrategy());
        character.move();  // Output: 달린다.
    }
}

이렇게 전략 패턴을 사용하면, 이동 방식이라는 알고리즘을 쉽게 교체할 수 있다. 이로써 코드의 유연성을 높이고, 알고리즘을 캡슐화하여 코드의 복잡성을 줄일 수 있다.

+ Recent posts