전략패턴(Strategty Pattern)

zyan·2024년 2월 2일
0

design pattern

목록 보기
1/1

전략패턴이란?

알고리즘군을 정의하고 캡슐화해서 각각의 알고리즘군을 수정해서 쓸 수 있게 해준다. 전략 패턴을 사용하면 클라이언트로부터 알고리즘을 분석해서 독립적으로 변경할 수 있다.
참고: (도서)헤드 퍼스트 디자인 패턴

만약 오리(Duck) 클래스가 있다고 하자.

  • 오리 클래스를 상속받는 클래스는 여러개가 있다.
    - 청둥오리(Mallard Duck), 원앙(Mandarin Duck), 러버덕(RubberDuck, 장난감) 등..
  • 각각의 오리의 생김새를 나타내는 추상메소드인 display가 Duck클래스에 존재한다.
  • 몇몇의 오리에게는 '날아가는'행동을 하게끔 하고 싶은데, Duck클래스에 fly 메소드를 추가하기에는 무리가 있다. 러버덕은 날 수 없기 때문에..
  • 그렇다고 자식 클래스가 특정 fly 인터페이스를 구현하도록 설계하면, 모든 자식 클래스마다 동일한 메소드를 구현해주어야 하고, 수정이 필요할 때도 마찬가지로 모든 클래스에서 수정하는 작업을 반복해야 한다. 물론 버그 발생 가능성이 높아진다.
  • 따라서 '날아가는'행동을 오리클래스나 오리자식클래스에서 정의한 메소드를 사용하도록 하는 것이 아니라, 이 행위를 다른 클래스에 '위임'한다.

이를 간단한 UML로 표현해보면 아래와 같다.

이제 '날아가는'행위는 Duck 클래스의 flyBehavior 변수가 FlyBehavior 인터페이스를 구현한 클래스를 참조하게 함으로써 여러 종류의 오리가 각각 다른 '날기'를 할 수 있게 되었다.
flyBehavior가 참조하는 클래스를 동적으로 변경할 수 있도록 하려면 Duck 클래스에 setFlyBehavior 메소드를 추가하면 된다.

0개의 댓글