디자인패턴
디자인 패턴 - 전략 패턴
개발자 포비
2024. 11. 27. 22:30
전략 패턴(Strategy Pattern)은 객체 지향 프로그래밍에서 중요한 디자인 패턴 중 하나이다. 변화시키고자 하는 알고리즘을 추상화하여 동적으로 교체하여 사용하는 방법으로 사용된다. 이렇게 동적으로 상태가 변화해야 하는 상황은 게임과 같은 곳에서도 많이 볼 수 있다.
- 알고리즘 변경의 유연성
- 특정 작업을 수행하는 여러 방식을 정의할 수 있습니다.
- 클라이언트 코드를 수정하지 않고도 알고리즘을 쉽게 변경할 수 있습니다.
- 구조적 특징
- 전략 인터페이스: 모든 알고리즘의 공통 메서드를 정의합니다.
- 구체적인 전략 클래스들: 인터페이스를 구현하는 실제 알고리즘들입니다.
- 컨텍스트 클래스: 전략 객체를 사용하는 주체입니다.
예제
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이라는 인터페이스 클래스로 추상화하여 사용한다. 덕분에 여러 무기를 사용하고자 하더라도 모든 무기에 대한 처리코드가 필요하지 않아졌으며 동적으로 원하는 시점에 무기를 바꾸어 사용할 수 있게된다.