- Today
- Total
작심삼일
6주차-2. Strategy 본문
디자인 패턴을 모르는 사람이 스터디를 하며 적은 것이라 틀린 부분이 있을 수 있습니다.
틀린 부분은 알려주시면 감사하겠습니다.
어떤 패턴인가
동일 계열의 알고리즘군을 정의하고, 각 알고리즘을 캡슐화하며, 이들을 상호교환이 가능하도록 만듭니다.
알고리즘을 사용하는 클라이언트와 상관없이 독립적으로 알고리즘을 다양하게 변경할 수 있게 합니다.
동일한 문제를 다른 알고리즘으로 해결할 수 있게 하는 패턴이라고 생각하는 것이 편하다.
예를 들면, 보통 다른 알고리즘을 추가할 때 if-else 문으로 추가하지만, 이 패턴을 사용하면 새 클래스 추가하는 형태가 되겠다.
어떻게 쓰는가
출근할 때 여러 가지 방법으로 할 수 있다. 이를 Strategy 패턴을 사용해서 간단하게 짜봤다.
class GoToWork():
def __init__(self, method):
if method == 'Bus':
self.byBus
elif method == 'Walk':
self.byFoot
elif method == 'Subway':
self.bySubway
def byBus(self):
print('BUS')
def byFoot(self):
print('Walk')
def bySubway(self):
print('Subway')
어디서 활용되는가
이는 책의 내용 (p. 408)을 그대로 가져왔다.
1. 행동들이 조금씩 다를 뿐 개념적으로 관련된 많은 클래스들이 존재할 때, 많은 행동 중 하나를 가진 클래스를 구성할 수 있는 방법을 제공한다.
2. 알고리즘의 변형이 필요할 때
3. 사용자가 몰라야하는 데이터를 사용하는 알고리즘이 있을 때
4. 하나의 클래스가 많은 행동을 정의하고, 이런 행동들이 그 클래스의 연산 안에서 복잡한 다중 조건문의 모습을 취할 때
인터넷을 찾아보니 특히 게임 프로그래밍에서 게임 캐릭터가 자신이 처한 상황에 따라 공격이나 행동하는 방식을 바꾸고 싶을 때 주로 사용한다고 한다.
My Opinion
디자인 패턴을 공부한지 시간이 좀 지나서 그런지 이번 패턴도 크게 어렵지 않았다.
이 패턴은 다른 분야에서 일하는 분들은 많이 사용할 것 같지만, 나는 당장 어디에 활용할 지 생각나진 않는다.
그래도 if-else문을 계속 추가하지 않고 코드를 깔끔하게 쓰고싶을 때 사용하지 않을까..?
'스터디 > 디자인 패턴' 카테고리의 다른 글
7주차-2. Visitor (0) | 2021.06.23 |
---|---|
7주차-1. Flyweight (0) | 2021.06.23 |
6주차-1. Adapter (0) | 2021.06.09 |
5주차-2. State Pattern (0) | 2021.05.26 |
5주차-1. Decorator Pattern (0) | 2021.05.26 |