- 사전적 의미로는 '계획', '전략'을 뜻한다.
- 전략을 쉽게 바꿀 수 있도록 해주는 패턴이다.
- 현재 상황에 따라 행동하는 방식을 바꾸고 싶을 때 사용한다.
예를들어 내가 복싱과 태권도를 할 수 있다고 가정하자
복싱에서의 '공격'이란 주먹을 내지르는 것이다.
태권도에서의 '공격'은 발로 차는 것이다. (스포츠 태권도에서는 주먹을 안쓰니까 ^^;;;;)
나는 복싱 대회에서는 주먹을 내지르는 공격을 해야하고 태권도 대회에서는 발로 차는 공격을 해야한다.
위 상황을 코드로 구현해보자.
경력이 낮고 실력이 부족했을 적의 나는 아마 위와 같이 구현했을 것이다. 딱 봐도 좋지 않은
코드라는 것을 알 수 있을 것이다. 어떠한 행동이 추가 될 때마다 무슨 대회인지 체크해야한다.
회사를 다니면서 내가 만나왔던 대부분의 사람들은 위와 같이 코드를 구현하였다.
나 또한 위와 같은 방식으로 많이 구현해왔었다. 그런데 만약 여기서 경기 룰을 바꿀 수 있어
복싱에 주먹 대신 발차기를, 태권도에 발차기 대신 주먹을 사용할 수 있게 해주고 싶다면?
Boxing Class와 Taekwondo Class에 Attack() 함수를 HandAttack(), KickAttack()처럼
둘로 나누어 구현해야 할것이다.
이렇게 되면 Boxing Class와 Taekwondo Class에 서로 중복되는 함수가 생겨나게 된다.
이러한 문제점들을 해결하기 위해 스트레티지 패턴을 활용할 수 있다.
위와 같이 적용할 수 있다.
위의 구조라면 새로운 격투기 스포츠가 추가되어도 변경하기 쉬워진다.
참고 출처
'프로그래밍 > 디자인패턴' 카테고리의 다른 글
MVC (Model-View-Controller) (0) | 2020.04.09 |
---|---|
Command (커맨드) (0) | 2020.04.09 |
FSM (유한 상태 머신) (0) | 2020.04.08 |
Factory (팩토리) (0) | 2020.04.08 |
Observer (옵저버) (0) | 2020.04.07 |