전략패턴
알고리즘 군을 별도 클래스로 정의하여, 알고리즘을 상호 교환할 수 있도록 만드는 패턴
사용 시점 및 이유
- 하나의 클래스가 많은 로직을 갖고 그 로직이 여러개의 조건으로 인해 분기하여 복잡해질 때
- 내부 구현이 조금 다를뿐 개념적으론 관련된 클래스들이 존재할 때
- 사용자에게 알고리즘을 캡슐화 하고, 그 알고리즘을 다른 클래스에서도 재사용 하고 싶을 때
- 서브클래싱을 하지 않고 기능 확장을 하고 싶을 때
구현
- Context는 사용자의 요청 을 전략객체로 전달하여 로직을 수행한다.
- Context의 정보를 Strategy에서 알아야 할 때가 있는데, Strategy 인터페이스에서 파라미터를 정교하게 설계하거나, Strategy 클래스들이 Context 클래스에 의존하도록 할 수도 있다.
- 두번째 방식은 Context와 Strategy 객체들 간 결합도가 생길 수 있으므로 주의가 필요하다.
- Strategy객체를 사용할지 말지 선택성을 부여할 수도 있다. Context에서 Strategy 보유 유무를 판단하고, 보유하지 않으면 디폴트 구현을 수행하도록 할 수도 있다.
'디자인패턴' 카테고리의 다른 글
(행동패턴) 비지터(방문자) 패턴 (0) | 2023.05.11 |
---|---|
(행동패턴) 템플릿메서드 패턴 (0) | 2023.05.10 |
(행동패턴) 상태 패턴 (0) | 2023.05.08 |
(행동패턴) 옵저버 패턴 (0) | 2023.05.08 |
(행동패턴) 메멘토 패턴 (0) | 2023.05.08 |