728x90
목적
- 같은 종류의 작업을 하는 알고리즘을 정의합니다.
- 각 알고리즘을 캡슐화하고 알고리즘들을 서로 바꿔 사용할 수 있도록합니다.
- 해당 패턴은 알고리즘을 사용하는 클라이언트로부터 독립적으로 알고리즘을 바꿔서 적용시킬 수 있도록합니다.
패턴이 필요한 경우
- 경우에 따라 서로 다른 여러 알고리즘이 존재할 때.
- 알고리즘이 실행 시점에 결정되어져서 조건문(if, switch...) 등을 이용해서 다른 알고리즘을 선택해야 하는 경우.
문제
- 알고리즘의 다른 버전이 존재해서, 중복으로 존재하거나 if문을 이용해서 선택해야하는 경우.
- OCP 를 위반하게 됩니다.
- 결국 변경되는 부분과 변경되지 않는 부분을 분리하여 설계하자는 것이 이 패턴의 목적입니다.
해결방안
- 중복을 공통화시킵니다.
- 실행 시점에 맞는 알고리즘을 호출하도록 합니다.
- 상속 또는 인터페이스를 활용합니다.
- 그 결과 수정해야할 경우 strategy를 추가하고, 나머지는 변경하지 않아도 됩니다.
예
- 오리가 있다고 생각해봅시다.
- 장난감 오리와 진짜 오리가 있습니다.
- 장난감 오리는 날 수 없지만 진짜 오리는 날 수 있습니다.
- 그럴 때 flyable이라는 인터페이스를 만들어 진짜 오리에만 구현하게끔 합니다.
- 그렇게하면 바뀌는 부분과 그렇지 않은 부분이 분리됩니다.
결론
- 변화하는 부분과 그대로 있는 부분을 분리하려면 여러개의 클래스 집합을 만들어야함.
- 그럴 때, 인터페이스나 추상 클래스를 사용하여 캡슐화를 함.
- 실제 구현은 하위 strategy 클래스에 위임함.
728x90
'Computer Science > 디자인 패턴' 카테고리의 다른 글
[디자인 패턴] Facade Pattern (0) | 2021.12.14 |
---|---|
[디자인 패턴] Adapter Pattern (0) | 2021.12.13 |
[디자인 패턴] DAO Pattern (0) | 2021.10.29 |
[디자인 패턴] SOLID 원칙 (0) | 2021.10.18 |
[디자인 패턴] 디자인 패턴이란? (0) | 2021.10.16 |
댓글