전략 패턴(Strategy Pattern)은 객체지향 프로그래밍에서 사용하는 디자인 패턴 중 하나로, 행위(behavior) 패턴에 속합니다. 이 패턴은 여러 알고리즘을 정의하고, 이 알고리즘들을 캡슐화하여 필요에 따라 상호 교체할 수 있도록 설계합니다. 즉, 런타임에 객체의 행동을 바꿀 수 있는 유연성을 제공합니다.
1. 전략 패턴의 예시

왕, 왕비, 토끼, 모자 장수와 같은 역할을 고정시키고 코드를 짰을 때, 토끼나 왕을 다른 무언가로 대체 시키고 싶을 때에는 코드를 수정해야 한다. 이러한 코드들의 수정이 불편하기에 특정 작업을 다양한 방식으로 수행하는 클래스를 선택한 후 모든 알고리즘을 전략들(strategies)이라는 별도의 클래스들로 추출하는데, 이것을 전략 패턴이라고 한다.
2. SOLID
SOLID 중 S는 단일 책임 원칙, O는 개방 폐쇄 원칙, D는 의존 역전성 원칙이다.
2.1 Single Responsibility Principle (SRP) - 단일 책임 원칙
클래스는 하나의 책임(기능)만 가져야 하며, 그 책임을 완전히 캡슐화해야 합니다. 즉, 하나의 클래스는 오직 하나의 이유로만 변경되어야 합니다.
책임이 분리되면 코드의 변경이 필요할 때 다른 기능에 영향을 주지 않고 수정할 수 있습니다.

1번 기능과 2번 기능이 있을 때, Case1번의 경우 두 가지 기능이 전부 포함되어 있는 경우이고, Case2번의 경우 각 기능을 하는 기계가 분리 되어 있다고 가정하자.
커피를 만들려면 1,2번의 기능이 전부 성공해야 한다. 이때 커피가 나오지 않고 오류가 발생했을 때, Case1번에서 1번 기능의 오류인지 2번 기능의 오류인지 판단하기 힘들다. 하지만 Case2번에서는 각각의 기계를 사용하여 오류가 1번인지 2번인지 판단하기 비교적 용이하다.
이렇게 각 기능들을 분리하여 오류를 판별하기 쉽게 하는 것이 SRP 원칙이다.
2.2 Open/Closed Principle (OCP) - 개방/폐쇄 원칙
소프트웨어 개체(클래스, 모듈, 함수 등)는 확장에는 열려 있어야 하고, 수정에는 닫혀 있어야 합니다. 즉, 기존 코드를 변경하지 않고 새로운 기능을 추가할 수 있어야 합니다.
새로운 기능 추가 시 기존 코드를 수정하지 않기 때문에 코드의 안정성을 유지할 수 있습니다.
2.3 Dependency Inversion Principle (DIP) - 의존 역전 원칙
고수준 모듈은 저수준 모듈에 의존해서는 안 됩니다. 둘 다 추상화된 인터페이스에 의존해야 합니다. 즉, 구체적인 구현에 의존하지 않고, 추상화된 것에 의존해야 합니다.
코드의 유연성과 재사용성을 높이고, 모듈 간 결합도를 낮출 수 있습니다.
Share article