본문 바로가기

프로그래밍/디자인패턴

Strategy (스트레티지)

728x90
반응형

- 사전적 의미로는 '계획', '전략'을 뜻한다.

- 전략을 쉽게 바꿀 수 있도록 해주는 패턴이다.

- 현재 상황에 따라 행동하는 방식을 바꾸고 싶을 때 사용한다.

예를들어 내가 복싱과 태권도를 할 수 있다고 가정하자

복싱에서의 '공격'이란 주먹을 내지르는 것이다.

태권도에서의 '공격'은 발로 차는 것이다. (스포츠 태권도에서는 주먹을 안쓰니까 ^^;;;;)

나는 복싱 대회에서는 주먹을 내지르는 공격을 해야하고 태권도 대회에서는 발로 차는 공격을 해야한다.

위 상황을 코드로 구현해보자.

 

경력이 낮고 실력이 부족했을 적의 나는 아마 위와 같이 구현했을 것이다. 딱 봐도 좋지 않은

코드라는 것을 알 수 있을 것이다. 어떠한 행동이 추가 될 때마다 무슨 대회인지 체크해야한다.

 

 

버츄얼과 오버라이드가 빠졌지만 알아보시리라 믿습니다...

회사를 다니면서 내가 만나왔던 대부분의 사람들은 위와 같이 코드를 구현하였다.

나 또한 위와 같은 방식으로 많이 구현해왔었다. 그런데 만약 여기서 경기 룰을 바꿀 수 있어

복싱에 주먹 대신 발차기를, 태권도에 발차기 대신 주먹을 사용할 수 있게 해주고 싶다면?

Boxing Class와 Taekwondo Class에 Attack() 함수를 HandAttack(), KickAttack()처럼

둘로 나누어 구현해야 할것이다.

이렇게 되면 Boxing Class와 Taekwondo Class에 서로 중복되는 함수가 생겨나게 된다.

이러한 문제점들을 해결하기 위해 스트레티지 패턴을 활용할 수 있다.

 

ChangeCompetition()에서 인자값이 enum 타입인 changeCompetition 대신에 new Boxing()이나 new Teakwondo()처럼 BaseClass인 CombatSport class를 인자로 받으면 더 깔끔하게 구현할 수 있다.

위와 같이 적용할 수 있다.

위의 구조라면 새로운 격투기 스포츠가 추가되어도 변경하기 쉬워진다.

참고 출처

 

strategy 패턴

strategy의 의미는 '전략', '전술'이다. 소프트웨어 개발에서 전략이나 전술은 알고리즘으로 구현한다. strategy 패턴은 [그림 5-47]과 같다. 즉 알고리즘 군을 정의하고(strategySort 추상 클래스) 같은 알고리즘(버블 정렬, 퀵 정렬, 선택 정렬 등)을 각각 하나의 클래스로 캡슐화한(quickSort 클래스, selectSort 클래스, bubbleSort 클래스) 다음, 필요할 때 서로 교환해서 사용할 수 있게 해준다. 이 패턴

terms.naver.com

 

 

스트레티지 패턴 (Strategy Pattern)

#스트레티지패턴 #스트레티지 #스트래티지패턴 #스트래티지 #StrategyPattern​기존의 코드 변경 없이 새...

blog.naver.com

 

 

다람쥐와 포동포동이

 

RememberCook 9월 28일 정식 출시!

두번째 게임인 RememberCook이 출시되었습니다. 귀여운 캐릭터들이 나오는 간단한 게임이며 플레이어의 공간인지능력을 테스트하는 게임입니다. 아래 링크를 통해 다운 받으실 수 있으니 많은 관��

chipmunk-plump-plump.tistory.com

반응형

'프로그래밍 > 디자인패턴' 카테고리의 다른 글

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