전략 패턴(Strategy Pattern)은 행동 패턴(Behavioral Pattern) 중 하나로서 특정 행동(알고리즘/기능)을 유연하게 선택하고 변경할 수 있게 해주는 패턴이에요.
기능군을 정의하고 각 구체 기능 처리 로직을 캡슐화하여 상호 교환 가능하게 만들어주는 패턴인데 이 말인즉슨, 어떤 클래스의 행동을 동적으로 바꿀 수 있도록 해주는 거죠.
이를 통해 클라이언트에서는 내부의 구체적인 알고리즘에 의존하지 않고도 사용할 수 있다는 특징이 있습니다.
기능 군 정의:
전략 패턴은 여러 개의 알고리즘이나 행동이 동일한 목적을 달성할 수 있도록 합니다.
간단하게 예를 들어, 정렬 알고리즘에는 버블 정렬, 퀵 정렬, 병합 정렬 등이 있습니다. 이들 알고리즘은 모두 정렬이라는 목적을 달성하지만, 각 알고리즘마다의 내부 구현 방식이 다를 거에요.
하나 더!
ID 생성 전략도 마찬가지일 겁니다.
SpringBoot에서 Entity 객체 내 @Generated() 어노테이션이 쓰이는데
이 경우에도 ID 생성 전략에는 Serial, Auto, Identity 등 지정해서 넣어줄 수 있지만
이 전략들은 모두 “ID 생성”이라는 목정을 달성해요.
캡슐화:
각각의 알고리즘을 별도의 클래스로 정의하고 캡슐화하여, 필요에 따라 이러한 처리 로직/알고리즘을 교체할 수 있도록 해요.
이렇게 하면 클라이언트는 알고리즘의 구체적인 구현에 의존하지 않고, 인터페이스만을 통해 알고리즘을 사용할 수 있게됩니다.
상호 교환 가능:
알고리즘을 캡슐화함으로써, 런타임 시에 알고리즘을 교체하거나 변경할 수 있는데요. 이를 통해 프로그램의 유연성과 재사용성이 증가하는 효과가 있겠죠.

위 사진에서 볼 수 있듯 기본적으로 “전략 Interface” / ”전략 Class” / ”컨텍스트 Class”
이 3가지의 구성 요소로 이루어져 있어요.