23. 전략 패턴(Strategy Pattern)

23.1 개요 

프로그래밍을 하다보면 같은 문제를 해결하는 여러 가지 방법 중에 무엇을 사용하는 것이 효과적인지 고민을 하는 경우가 많습니다. 경우에 따라서는 일단은 효율이 떨어져도 개발 비용이 적게 드는 방법으로 해결을 하고 차후에 개선된 알고리즘을 사용하여 교체를 하는 방법을 사용하기도 합니다. 전략 패턴은 같은 문제를 해결하기 위한 여러 알고리즘을 일반화하여 사용하는 부분에서 특정 알고리즘에 종속적이지 않고 독립적으로 사용할 수 있게 하는 패턴입니다.

전략 패턴에서는 구체적으로 어떠한 방법으로 문제를 해결해야 할 지를 결정하지 못한 경우에 해당 부분만을 별도의 형식으로 추상화하여 사용함으로써 작업을 분리할 수 있게 해 줍니다. 이를 통해 작업 분배가 용이해 질 수 있으며 다양한 문제 해결 방법에 대한 정의를 적은 비용으로 교체할 수 있게 함으로써 유연성 있는 프로그래밍을 할 수 있게 해 줍니다.

 “전략 패턴은 같은 문제를 해결하는 여러 알고리즘을 일반화하여

사용하는 부분에서 알고리즘 독립적으로 사용하는 패턴입니다.”

 

23. 2 시나리오

이번에 EH Camera 회사에서는 프로그래밍에 관심을 갖고 있는 학생들을 대상으로 경진 대회를 진행하게 되었습니다. 그리고, 저는 세 번째 관문인 설계와 구현 능력을 평가하는 실기 문제를 출제하게 되었죠. 강의를 하면서 시험 문제를 출제하는 것은 일상과 같지만 새로운 보석을 찾기 위해 진행하는 것을 알고 있기에 조심스럽게 접근하게 되네요.

기본적인 문제 해결 능력을 갖고 있는지를 묻기에는 자료구조와 알고리즘에 대한 소재를 제시하는 것이 좋겠다는 생각을 갖고 있는데 변별력을 두기 위해 어떠한 구조를 요구할 지 고민을 하였습니다. 이러한 고민 끝에 여러 가지 멤버를 가진 사진 데이터를 벡터에 보관하여 관리하고 다양한 방법으로 사진 데이터를 보여주는 프로그램을 제시할 거예요. 그리고, 사진 데이터를 보여주는 방법은 손 쉽게 추가 및 삭제할 수 있게 설계할 것을 주문할 생각이예요. 현재 제가 생각하는 것은 전략 패턴을 효과적으로 사용할 줄 아는지를 가지고 변별력을 주겠다는 거지요. 물론, 제가 생각하는 것보다 더 창의적인 표현들이 나올 수도 있기를 기원하면서 말이예요.


23. 전략 패턴(Strategy Pattern) 설계

23. 전략 패턴(Strategy Pattern) 구현