# 스트래티지 패턴(Strategy Pattern)

스트래티지 패턴(Strategy Pattern)에서는 알고리즘군을 정의하고 각각을 캡슐화하여 교환해서 사용할수 있도록 만든다.

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


오리 클래스를 만들기


오리를 상속 받아 붉은 오리를 만듬

상속을 활용해 코드를 재활용 할 수 있어 보였는데...

하지만 장난감 오리를 만들어보면 바로 문제가 발생한다.


장난감 오리


나무 오리

장난감 오리는 날수없고 나무 오리는 날수없고 소리도 낼 수 없다.

그러면 만들 때 마다 오버라이딩하여 새롭게 정의해야 하는 불편함이 있다.


이럴땐 바로 함수를 정의 하지말고 행동부분을 따로 인터페이스로 만들어 부모가 가지고 있고 자식이 자신이 필요한 데이터로 초기화해 사용 하는 방법을 쓰면 좋다.


- 행동을 인터페이스화 하기

소리가 있다 or 없다


날 수 있다 or 없다


- 변경된 부모 클래스 -

이렇게 행동들을 클래스로 만들고 오리에 인터페이스로 넣어주면 자식들의 행동은 자식이 초기화해 사용하면 된다.


- 변경된 자식 클래스 -


함수를 오버라이딩해 재정의 할 필요가 없어젔다.

생성자 함수에서 초기화해주면 끝.


- 완성 -


- 핵심 -

클래스를 설계할때 달라지는 부분을 찾아내고, 달라지지 않는 부분으로부터 분리 시킨다. 바뀌는 부분을 따로 뽑아서 캡슐화시킨다.

그렇게 하면 나중에 바뀌지 않는 부분에는 영향을 미치지 않은 채로 그 부분만 고치거나 확장할 수 있다.

반응형