전략 패턴이란?
디자인 패턴 중 하나로 동일 계열의 알고리즘군을 정의하고, 각 알고리즘을 캡슐화하며, 이를 상호교환이 가능하도록 만든다. 전략 패턴의 기본적인 구조는 아래와 같다.
예시
전략 패턴을 사용하지 않는 경우
public abstract class Robot {
public abstract void move();
}
public class WalkingRobot extends Robot {
@Override
public void move() {
System.out.println("걷는다!");
}
}
public class RunningRobot extends Robot {
@Override
public void move() {
System.out.println("달린다!");
}
}
public class FlyingRobot extends Robot {
@Override
public void move() {
System.out.println("난다!");
}
}
다음과 같이 여러 가지 이동 방법을 가질 수 있는 로봇이 있다면, 새로운 이동 방법이 생길 때마다, 새로운 클래스를 만들어야된다. 또한 이동 방법 뿐만 아니라 새로운 기능을 추가할 때마다, 클래스의 수는 기하급수적으로 늘어난다.
전략 패턴을 사용한 경우
public class Robot {
private MoveStrategy moveStrategy;
private TemperatureStrategy temperatureStrategy;
...
public void move() {
moveStrategy.move();
}
}
public interface MoveStrategy {
void move();
}
public class Walk implements MoveStrategy {
@Override
public void move() {
System.out.println("걷는다!");
}
}
public class Run implements MoveStrategy {
@Override
public void move() {
System.out.println("달린다!");
}
}
public class Fly implements MoveStrategy {
@Override
public void move() {
System.out.println("난다!");
}
}
...
위와 같이 이동 방법을 별도의 인터페이스로 만들어 관리하게 되면 Robot
클래스 하나로 여러 가지 이동 방법을 가진 로봇을 만들 수 있다. 뿐만아니라 여러 개의 알고리즘을 가진 추가적인 기능이 생겨도 클래스가 기하급수적으로 늘어나지 않는다.
JDK에서 사용된 전략 패턴
Comparator
가 대표적으로 JDK에서 사용된 전략 패턴이다. 이 인터페이스를 구현하여 비교 하지 못하는 객체를 비교 가능하도록 만들 수 있고, 이를 정렬 등을 가능하게 만들 수 있다.
참고 사항
https://gmlwjd9405.github.io/2018/07/06/strategy-pattern.html
댓글남기기