전략패턴

신동혁·2022년 8월 12일
0

디자인패턴

목록 보기
3/5

1. 전략 패턴( Strategy Pattern )

여기서 말하는 전략은 어떤 객체가 특정한 목표를 수행하기 위해 할 수 있는 행동의 집합이다. 예를 들어 어떤 사람이 한 곳에서 다른 곳으로 이동할 때 방법으로 버스타기, 지하철타기, 자가용타기 등등을 생각해 볼 수 있다. 이런 이동 방법들을 전략이라고 할 수 있다. 만약 위에서 언급한 사람이 무언가를 먹으려할 때 방법으로는 식당가기, 밥차려먹기 등등을 생각해 볼 수 있다. 그럼 이 사람은 이동하기 전략과 무언가 먹기 전략이 있고, 이동하기 전략으로는 버스타기, 지하철타기, 자가용타기가 있으며 무언가 먹기 전략으로는 식당가기, 집밥차려먹기가 있는 것이다.

이렇게 객체와 객체의 전략을 따로 나누고, 객체의 전략들은 각각을 캡슐화해 관리하는 것을 전략 패턴이라고 한다. 이 패턴을 쓰는 이유는 무엇일까? 만약 위에서 언급된 전략들을 이용해 다음과 같은 상황을 상상해본다. 이동하기 전략과 무언가 먹기 전략을 조합해 사람객체 6명을 만든다.

  • 첫번째 사람은 버스타기 전략과 식당가기 전략을 사용하는 사람객체
  • 두번째 사람은 버스타기 전략과 밥차려먹기를 사용하는 사람객체
  • 세번째 사람은 자하철타기 전략과 식당가기 전략을 사용하는 사람객체
  • 네번째 사람은 지하철타기 전략과 밥차려먹기를 사용하는 사람객체
  • 다섯번째 사람은 자가용타기 전략과 식당가기 전략을 사용하는 사람객체
  • 여섯번째 사람은 자가용타기 전략과 밥차려먹기를 사용하는 사람객체

문제점1) 이때 버스타기 전략의 내용이 마을버스 타기에서 시외버스 타기로 바뀌었다고 가정해본다. 그럼 일일이 이미 생성된 첫번째 사람객체와 두번째 사람객체를 수정해줘야 할 것이다. 지금은 객체수가 적기 때문에 큰 문제는 되지 않지만, 만약 객체수가 훨씬 많은 경우 모든 객체를 일일이 수정하는 것이 어려울 가능성이 높다.

문제점2) 사람객체의 새로운 전략으로 소통하기 전략이 생겼다고 가정해본다. 이때도 문제점1과 마찬가지로 이미 생성된 사람객체들에 일일이 새로운 소통하기 전략에 대한 내용을 추가해줘야 하는 문제점이 생긴다.

=> 이를 해결하기 위해 객체 생성과 전략 생성을 나눠서 하고, 객체를 생성할 때 원하는 전략을 파라미터로 받아 생성하면 된다. 또한 이미 생성된 객체의 전략을 바
꾸기 위해 set메서드를 작성해주면 된다.

문제점1 해결내용) 해당 전략을 생성한 클래스만 변경하고 객체에서 set메서드로 새롭게 바뀐 전략을 파라미터로 받아주면 된다.

문제점2 해결내용) 이 경우는 추가된 전략에 대한 클래스를 만들고 객체 생성자 또한 추가된 전략을 파라미터로 추가해줘야 하므로 이미 만든 객체를 수정하는 식은 어려울 것 같다. 하지만 새로운 생성자를 통해 추가된 전략에 대한 객체를 만들 수 있으므로 나머지 파라미터값은 유지한채 추가된 전략에 대한 내용만 파라미터에 추가한다면 문제가 해결될 수 있다고 본다.

profile
개발취준생

0개의 댓글