전략 패턴(Strategy Pattern)
- 행위를 클래스로 캡슐화하여 동적으로 행위를 자유롭게 해주는 패턴
- 객체의 행위를 동적으로 변경하고 싶은 경우 직접 행위를 수행하지 않고 전략을 바꾸어주기만 함으로써 행위를 유연하게 확정하는 방법
예시(Example)
*Class Diagram
- 부모클래스 (Duck) 과 자식클래스 (MallardDuck, RedheadDuck)
*Example Code
- Question
- 만약 RedheadDuck이 울음소리를 내지 못한다면? -> RedheadDuck의 Quack()을 수정해야함
- 만약 MallardDuck이 날지 못한다면? -> MallardDuck의 fly()를 수정해야함
문제점
- 기존코드를 수정해야하 하므로 OCP에 위배됨.
- 클래스가 확장될 경우 중복 메소드가 생길 가능성이 높음
해결방법
- 코드에서 달라지는 부분과 달라지지않는 부분을 분리한다. (Fly, Quack)
- 코드상에서 변화가 될 수 있는 부분은 Quack, Fly이다. 따라서 변화될 수 있는 부분을 인터페이스로 구현한다.(QuackBehavior, FlyBehavior)
- Fly -> 날수있는(FlyWithWings) 과 날수없는(FlyNoway)에 대해서 구현한다.
- Quack -> 소리를 낼수 있는(Quack) 과 소리를 낼수없는(MuteQuack)에 대해서 구현한다.
- Duck 클래스에서 각 인터페이스를 정의(QuackBehavior, FlyBehavior)
- 변경된 구조에 맞게 외부에서 접근하여 변경할 수 있도록 Get(GetQuackBehavior, GetFlyBehavior), Set(SetQuackBehavior, SetFlyBehavior) 함수를 구현
'Programming > DesignPattern' 카테고리의 다른 글
[디자인 패턴] 데코레이터(Decorator) 패턴 (1) | 2021.05.23 |
---|---|
[디자인 패턴] 커맨드(Command) 패턴 (0) | 2021.05.20 |
[디자인 패턴] 스테이트(State) 패턴 (0) | 2021.05.17 |
[디자인 패턴] 싱글턴(Singleton) 패턴 (0) | 2021.05.13 |
[디자인 패턴] 옵저버(Observer) 패턴 (0) | 2021.04.30 |
댓글