전략 패턴(Strategy Pattern)은 어떤 작업(알고리즘이나 기능)을 여러 가지 방식으로 구현하고, 그 중에서 런타임에 원하는 방식(전략)을 선택하여 사용할 수 있도록 해주는 디자인 패턴이다.
- 동작의 캡슐화
각 동작을 별도의 클래스나 모듈로 분리하면, 단일 책임 원칙(SRP)을 준수할 수 있게 된다.- 유연성
동적으로 캡슐화된 동작을 쉽게 교체할 수 있다.- 확장성
OCP 준수 : 기존 코드를 수정하지 않고 새로운 동작을 추가할 수 있으므로, 확장성이 용이하다.
결론적으로, 유지보수와 확장이 용이하도록 코드 구조를 깨끗한게 분리하는 것이 전략 패턴 핵심 의의이다.
런타임 행동 변경 시, 메모리 사용량 차이
템플릿 메서드 패턴은 상속(Inheritance)을 기반으로 한다. 부모 추상 클래스가 알고리즘의 골격(전체 흐름)을 정의하고, 자식 클래스가 세부 단계를 오버라이드하여 구현한다. 상속 구조에 묶여 있기 때문에, 런타임에 동적으로 행동을 바꾸기 힘들다. 바꿀려면 새로운 객체를 새로 생성해야 하므로 메모리 사용량이 증가한다.
그에 반해, 전략 패턴은 구성(Composition)을 기반으로 한다. 런타임에 필요한 전략 객체를 자유롭게 교체할 수 있다. 컨텍스트는 그대로 두고, 내부 전략 객체만 변경하므로 불필요한 객체 생성 비용을 줄일 수 있다.
** 컨텍스트 객체란 전략을 사용하는 주체(클라이언트)이며, 전략을 실행하는 역할을 담당하는 객체이다.
잘 알아갑니다~ 고생하시고 귀 사의 건강과 행복이 넘치시길 강건합니다 태초부터 봐오던 사람이며 그 무엇보다 바꿀 수 없는 전략적인 인생을 살아오신 것 같습니다