본문 바로가기
우테코 프리코스/프리코스 오픈미션

전략 패턴은 어떻게 사용하는 걸까?

by sloth365 2025. 11. 6.

전략 패턴의 구조

 

전략 패턴이 무엇인지 이해는 했지만 이 개념을 사용하기엔 많이 어려웠다.

그 이유가 무엇인가 찾아봤더니 클라이언트가 필요로 하는 옵션을 제공해 줄 콘텍스트가 필요하다.

콘텍스트란 문맥으로 이 흐름을 이어주는 중간 계층으로 생각하면 될 것 같다.

 

이것의 장점은 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에 맞게 그것을 가져오면 된다.