디자인패턴

디자인 패턴 - 전략 패턴

개발자 포비 2024. 11. 27. 22:30

 전략 패턴(Strategy Pattern)은 객체 지향 프로그래밍에서 중요한 디자인 패턴 중 하나이다. 변화시키고자 하는 알고리즘을 추상화하여 동적으로 교체하여 사용하는 방법으로 사용된다. 이렇게 동적으로 상태가 변화해야 하는 상황은 게임과 같은 곳에서도 많이 볼 수 있다.  

  1. 알고리즘 변경의 유연성
  • 특정 작업을 수행하는 여러 방식을 정의할 수 있습니다.
  • 클라이언트 코드를 수정하지 않고도 알고리즘을 쉽게 변경할 수 있습니다.
  1. 구조적 특징
  • 전략 인터페이스: 모든 알고리즘의 공통 메서드를 정의합니다.
  • 구체적인 전략 클래스들: 인터페이스를 구현하는 실제 알고리즘들입니다.
  • 컨텍스트 클래스: 전략 객체를 사용하는 주체입니다.

예제

public interface Weapon {
    void attack();
}

public class Sword implements Weapon{
    @Override
    public void attack() {
        System.out.println("칼 공격");
    }
}

public class Bow implements Weapon{
    @Override
    public void attack() {
        System.out.println("활 공격");
    }
}

public class Human {
    Weapon weapon;

    public void attack(){
        weapon.attack();
    }

    public Weapon getWeapon() {
        return weapon;
    }

    public void setWeapon(Weapon weapon) {
        this.weapon = weapon;
    }

    public static void main(String[] args) {
        Human human = new Human();
        human.setWeapon(new Sword());
        human.attack();

        human.setWeapon(new Bow());
        human.attack();
    }
}

 

인간 객체는 자신이 사용할 무기를 Weapon이라는 인터페이스 클래스로 추상화하여 사용한다. 덕분에 여러 무기를 사용하고자 하더라도 모든 무기에 대한 처리코드가 필요하지 않아졌으며 동적으로 원하는 시점에 무기를 바꾸어 사용할 수 있게된다.