디자인 패턴/행위 패턴
Strategy 패턴
언린이
2021. 11. 5. 10:08
Strategy 패턴은 행위를 클래스로 캡슐화하여 동적으로 행위를 자유롭게 변경할 수 있도록 해주는 패턴입니다.
같은 문제를 해결하는 여러 알고리즘이 클래스별로 캡슐화되어 있고 이들이 필요할때 교체할 수 있도록 함으로써 동일한 문제를 다른 알고리즘으로 해결할 수 있도록 해줍니다.
구조
- Strategy
- 외부에서 동일한 방식으로 알고리즘을 호출하기 위한 메서드를 명시하는 인터페이스 클래스입니다.
- ConcreteStrategy
- Strategy 클래스에서 명시한 알고리즘을 실제로 구현한 클래스입니다.
- Context
- Strategy 클래스를 사용하는 역할을 수행합니다.
- 필요에 따라 동적으로 구체적인 전략을 변경할 수 있도록 setter 메서드를 제공합니다.
활용 상황
- 구현된 알고리즘은 다르지만 동일한 목적을 지닌 클래스들이 존재할때 유용합니다.
- 사용하는 시점에 따라서 알고리즘을 변경해야 할때 유용합니다.
Strategy 패턴의 장단점
- 장점
- 알고리즘마다 사용되는 코드 중복을 방지할 수 있습니다.
- 알고리즘을 변경하고 싶을때 쉽게 변경할 수 있습니다.
- 확장성이 용이하여 다양한 알고리즘을 쉽게 추가할 수 있습니다.
- 단점
- 알고리즘이 늘어날수록 클래스도 무한정 늘어납니다.
- 클라이언트가 사용할 알고리즘을 직접 결정해야 하기 때문에 모든 알고리즘에 대한 성능과 효율을 알고 있어야 합니다.