오늘의 질문
전략 패턴에 대해서 설명해주세요.
전략 패턴 (Strategy Pattern)
객체의 행위를 동적으로 변경하고 싶은 경우, 코드를 직접 수정하는 것이 아닌 추상화된 전략의 구현만을 바꿔 객체의 행위를 변경하는 디자인 패턴이다. 자바 언어의 요소로 설명하자면, 객체의 행위를 Interface 로 정의하고, Interface 의 메서드를 구현하는 구현체들을 주입하는 것이 전략 패턴의 대표적인 형태이다.
class Car {
private final MoveStrategy strategy;
private final int position;
public Car(MoveStrategy strategy, int position) {
this.strategy = strategy;
this.position = position;
}
public Car move(int input) {
if(strategy.isMovable(input)) {
return new Car(strategy, car + 1);
}
return this;
}
}
주어진 숫자에 따라서 자동차의 움직임을 결정하는 요구사항이 있는 경우, 위 예시처럼 MoveStrategy 라는 타입 필드를 선언하고 외부에서 이를 구현한 전략을 주입받도록 구현하면 자동차의 움직임 전략을 유연하게 바꿀 수 있다.
// 추상화된 전략 선언
interface MoveStrategy {
boolean isMovable(int input);
}
// 구현체로 전략 주입 ver1
class EvenNumberMoveStrategy implements MoveStrategy {
@Override
public boolean isMovable(int input) {
return (input % 2) == 0;
}
}
// ver2
class OddNumberMoveStrategy implements MoveStrategy { ... }
// ver3
class PrimeNumberMoceStrategy implements MoveStrategy { ... }
🔖 참고 자료