왜 나오게 되었나?

슈퍼 클래스에 새로운 기능을 넣고 싶을 때, 슈퍼 클래스에 메소드를 추가하면 끝일까?

→ 예외적으로, 한 서브클래스는 그 기능이 필요 없다면 어떻게 해야할까?(다른 동작이 필요하다던지?)

ex)

Duck이라는 클래스에 fly()라는 기능을 넣고싶은데, ToyDuck은 날수가 없다.

그러면 어떻게 해야할까??

인터페이스 구현?

필요한 기능을 인터페이스에 만들어놓고, 클래스를 만들 때마다 인터페이스를 구현하자?

→ 해당하는 행동을 만들었을 때에 대해서 코드 재사용을 전혀 기대할 수 없다.

→ 그래서 사용하게 된 게 전략패턴이다!

그 전에.. 알아둬야할 디자인 원칙

달라지는 부분을 찾아내고 달라지지 않는 부분으로부터 분리시킨다.

구현이 아닌 인터페이스에 맞춰서 프로그래밍한다.

전략 패턴?

알고리즘을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다.

알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다.

패턴 구조

스크린샷 2022-03-03 오후 12.43.17.png

Context class

변경할 부분이 없는 친구들을 모아둔다.