정의
- 전략 패턴은, 정책 패턴이라고도 하며 객체의 행위를 바꾸고 싶은 경우 직접 수정하지 않고 전략이라고 부르는 캡슐화된 알고리즘을 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하게 만드는 패턴이다.
- 전략 패턴은 여러 알고리즘이나 행동 중에서 선택해야 할 때 유용하다. 클라이언트 객체는 일련의 전략 객체 중 하나를 선택하고, 선택된 전략 객체는 클라이언트에서 필요한 일을 수행한다.
- 예를 들어서, 동일한 작업을 수행하고 있는 여러 알고리즘이 있는 경우, 전략 패턴을 사용하여 이러한 알고리즘을 캡슐화하고 클라이언트 코드와 분리할 수 있다. 이렇게 하면 새로운 알고리즘을 추가하거나 기존 알고리즘을 변경할 때 클라이언트 코드를 변경할 필요가 없다.
전략 패턴 예시 자바코드
전략 패턴을 예시로 설명하기 위해, 간단한 로봇 시뮬레이션을 구현해본다.
시뮬레이션 시스템에서 로봇이 다양한 동작을 수행해야 할 때, 전략 패턴을 사용하여 로봇이 수행하는 동작을 교체할 수 있다.
먼저, 전략 객체의 인터페이스를 정의한다. 아래에서 RobotStrategy라는 인터페이스를 만들어 로봇이 수행하는 동작에 대한 메서드를 정의한다.
public interface RobotStrategy{
void performAction();
}
다음으로, 전략 객체를 구현한다.
public class WalkStrategy implements RobotStrategy {
@Override
public void performAction() {
System.out.println("로봇이 걸어갑니다.");
}
}
public class FlyStrategy implements RobotStrategy {
@Override
public void performAction() {
System.out.println("로봇이 날아갑니다.");
}
}
public class ShootStrategy implements RobotStrategy {
@Override
public void performAction() {
System.out.println("로봇이 총을 쏩니다.");
}
}
이제, 로봇 객체를 만들고 로봇이 수행하는 동작을 교체할 수 있는 코드를 작성한다.
public class Robot {
private RobotStrategy strategy;
public Robot(RobotStrategy strategy) {
this.strategy = strategy;
}
public void setStrategy(RobotStrategy strategy) {
this.strategy = strategy;
}
public void performAction() {
strategy.performAction();
}
}
마지막으로, 메인 메서드에서 로봇 객체를 만들고, 다양한 전략 객체를 생성하여 로봇이 수행할 수 있는 동작을 살펴보자
public class Main {
public static void main(String[] args) {
Robot robot = new Robot(new WalkStrategy());
robot.performAction(); // "로봇이 걸어갑니다."
robot.setStrategy(new FlyStrategy());
robot.performAction(); // "로봇이 날아갑니다."
robot.setStrategy(new ShootStrategy());
robot.performAction(); // "로봇이 총을 쏩니다."
}
}
위 예시에서 전략 패턴을 사용해서 로봇이 수행하는 동작을 변경할 수 있다. Robot 클래스는 RobotStrategy 인터페이스를 사용해서 전략 객체를 저장하고, performAction()으로 전략 객체가 동작을 수행하게 한다.
'Computer Science > Design Pattern' 카테고리의 다른 글
[디자인 패턴] 옵저버(Observer) 패턴 (0) | 2023.03.18 |
---|---|
[디자인 패턴] Factory 패턴 (0) | 2023.03.14 |
[디자인 패턴] Singleton 패턴 (0) | 2023.03.13 |