작심삼일

6주차-2. Strategy 본문

스터디/디자인 패턴

6주차-2. Strategy

yun_s 2021. 6. 9. 22:16
728x90
반응형

디자인 패턴을 모르는 사람이 스터디를 하며 적은 것이라 틀린 부분이 있을 수 있습니다.

틀린 부분은 알려주시면 감사하겠습니다.

어떤 패턴인가

동일 계열의 알고리즘군을 정의하고, 각 알고리즘을 캡슐화하며, 이들을 상호교환이 가능하도록 만듭니다.

알고리즘을 사용하는 클라이언트와 상관없이 독립적으로 알고리즘을 다양하게 변경할 수 있게 합니다.

 

동일한 문제를 다른 알고리즘으로 해결할 수 있게 하는 패턴이라고 생각하는 것이 편하다.

예를 들면, 보통 다른 알고리즘을 추가할 때 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문을 계속 추가하지 않고 코드를 깔끔하게 쓰고싶을 때 사용하지 않을까..?

728x90
반응형

'스터디 > 디자인 패턴' 카테고리의 다른 글

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
Comments