
전략 패턴이 무엇인지 이해는 했지만 이 개념을 사용하기엔 많이 어려웠다.
그 이유가 무엇인가 찾아봤더니 클라이언트가 필요로 하는 옵션을 제공해 줄 콘텍스트가 필요하다.
콘텍스트란 문맥으로 이 흐름을 이어주는 중간 계층으로 생각하면 될 것 같다.
이것의 장점은 if-else로 option을 지정할 필요가 없다는 것이다.
하지만 나는 이전까지 클라이언트가 직접 전략에 대해 관여하고 있어서 if-else를 사용하지 않고는
문제를 해결하기 힘들었다.
이 문제를 해결하기 위해선 중간 단계가 필요하다.
그래서 전략을 가져오는 방법으로 내가 사용한 방식을 소개하려고 한다.

Game 클래스의 play() 메서드
public void play() {
int optionNumber = askOption();
Option option = optionSelector.select(optionNumber);
option.play();
}
OptionSelector의 select() 메서드
public class OptionSelector {
private final List<Option> selector = new ArrayList<>();
public OptionSelector() {
selector.add(new MissionOption());
}
public Option select(int number) {
return selector.get(number);
}
}
Game 클래스에서 optionSelector에게 옵션을 찾아달라고 select() 메서드를 보낸다.
그럼 optionSelector가 Option을 찾아서 반환하고 Game 클래스는 그 Option을 사용할 수 있게 된다.
이제는 if-else문으로 옵션이 맞는지 아닌지 판단하는 것이 아니라 단순히 selector의 리스트에 옵션들을
넣어두고 number에 맞게 그것을 가져오면 된다.
'우테코 프리코스 > 프리코스 오픈미션' 카테고리의 다른 글
| EnumMap 클래스란? (0) | 2025.11.09 |
|---|---|
| 의존성을 주입 하라고요? (0) | 2025.11.07 |
| 객체를 분리하는 기준이 뭘까? (0) | 2025.11.07 |
| Facade 패턴이 뭐야? (0) | 2025.11.06 |
| 프로젝트가 처음인데 어떻게 설정해야 하지? (0) | 2025.11.05 |