
디자인 패턴이란 객체지향 프로그래밍에서 클린 코드를 작성하기 위한 가이드 라고 생각한다. SW 개발하면서 여러 문제들을 해결하는 예제들을 제공한다. 이는 생성, 구조, 행위 패턴으로 구성되어 있으며 코드와 함께 알아보도록 하자.
전략 패턴은 동일한 프로세스를 실행할 수 있는 알고리즘이 여러개 일때, 이들을 동적으로 선택하는 것을 의미한다.

BatchProcessor 를 실행할 때 어떠한 리스트를 선택해야 할지 결정해야 한다. ArrayList LinkedList 등 여러 전략이 있다면, BatchProcessor 를 생성하는 시점에 필요한 전략을 주입하면 된다.
class BatchProcessor{
//MyList는 인터페이스
private final MyList<Integer> list;
//생성 시점에 전략을 결정하는 것 = 전략 패턴
public BatchProcessor (MyList<Integer> list) {
this.list = list;
}
void logic(){
//list를 활용하여 비지니스 로직 수행
}
}
main() {
//1. ArrayList 쓰는 전략을 사용할꺼야
MyArrayList<Integer> list = new MyArrayList<>();
BatchProcessor processor = new BatchProcessor(list);
//2. LinkedList 쓰는 전략을 사용할꺼야
MyLinkedList<Integer> list = new MyLinkedList<>();
BatchProcessor processor = new BatchProcessor(list);
}
BatchProcessor 의 재사용성이 높아졌다.BatchProcessor 가 MyList 인터페이스가 아닌 ArrayList 등의 구체적인 클래스에 의존했다면 LinkedList 를 사용하는 BatchProcessor 를 따로 생성해야만 할 것이다.정리하면 전략 패턴은 런타임 시점에 필요한 전략을 주입받아 재사용성을 높이는 패턴이라고 할 수 있다.