소프트웨어 설계 과정에서 반복적으로 발생하는 문제들에 대해 검증된 해결책을 정형화한 모범 사례라고 정의할 수 있다.
실행 중에 알고리즘을 선택할 수 있게 하는 패턴
객체가 할 수 있는 행위들을 각각 전략(Strategy)이라는 클래스로 캡슐화하고, 이들을 인터페이스를 통해 추상화한다.
결제 시스템에서 결제 수단(카드, 네이버페이, 카카오페이)에 따라 결제 로직이 달라지는 경우를 생각해보자.
PaymentService 코드를 수정할 필요 없이, 새로운 PaymentStrategy 구현체만 추가하면 된다.if-else 분기가 너무 많아져 가독성을 해칠 때