스트래티지 패턴
심오한 패턴이다. 같은 기능을 전략적으로 사용하고싶을때 사용 할 수 있다.
구체적으로 내가 이해한 내용을 적어본다.
1. 전략적 sorting
나는 sorting 라이브러리를 만드로 사용하는 상황으로 이해했다.
라이브러리 개발자 입장에서는 sort를 할 수 있는 방법이 여러가지이다. 같은 기능을 하지만, 각각의 장단점이 존재하기에 이를 고려한 설계를 한다.
라이브러리 사용자 입장에서는 여러가지 sorting알고리즘의 장단점에 대해 알고있고, 이를 활용하고 싶어한다.
이러한 상황에서 라이브러리 개발자는 다양한 sorting알고리즘에 유연한 설계를 해야하며 사용자가 여러가지 sorting알고리즘을 활용할수 있도록 해야한다. 또한 유지보수를 위해 sorting알고리즘 추가에 대해서도 생각해야한다.
따라서 라이브러리 개발자는 다음과 같이 설계할 수 있다.
인터페이스를 통해 같은기능을하는 세 클래스를 구현한다.
세클래스를 구현 한 후 전략적 패턴을 사용하기 위해 SortManager클래스를 구현한다.
이런 형태가 된다.
따라서 사용자는 SortManager의 setSort를 통해 Bubble, Quick, Merge를 선택할 수 있고, sort함수를 활용하여 Sort할 수 있다.
strategy 패턴에서는 SortManager가 핵심인듯 하다.
어떤 행위에 대해서 전략적으로 바꿔야 할 상황이 온다면 그 행위에 대한 interface를 정의하고 바뀔 상황에 맞는 interface를 구현해준다. 또한 구현한 interface를 상황에 맞게 쓸 수 있도록 set해주는 클래스를 제공해줘야 strategy 패턴이 완성된다.
strategy 패턴이 적용 될것을 미리 파악하고 설계한다면, 더 유연한 설계가 될 것 같다.
출처: https://www.youtube.com/watch?v=UEjsbd3IZvA&list=PLsoscMhnRc7pPsRHmgN4M8tqUdWZzkpxY