GamSaHam Velog
로그인
GamSaHam Velog
로그인
Strategy
GamSa Ham
·
2022년 11월 15일
팔로우
0
Design Pattern
0
GoF디자인패턴
목록 보기
16/22
👀 알고가면 좋은 것들
인터페이스
사람과 컴퓨터를 연결시켜주는 장치
기능에 대한 선언과 구현 분리
기능의 사용 통로
위임( delegate )
어떤 기능을 구현할때 그 책임을 다른 객체에게 떠넘기는 것
다른 객체의 기능을 빌려서 사용하는것
1. 의도
동일 계열의 알고리즘군을 정의하고, 각 알고리즘을 캡슐화합니다.
또한 이들이 상호교환을 할 수 있도록 합니다.
알고리즘을 사용하는 클라이언트와 상관없이 독립적으로 알고리즘을 다양하게 변경할 수 있게 합니다.
여러 알고리즘을 하나의 추상적인 접근점을 만들어 접근 점에서 서로 교환 가능하도록 하는 패턴
2. 활용성
행동들이 조금씩 다를 뿐 개념적으로 관련된 많은 클래스들이 존재할 때, 전략 패턴은 많은 행동 중 하나를 가진 클래스를 구성할 수 있는 방법을 제공합니다.
알고리즘의 변형이 필요할 때, 변형물들이 알고리즘의 상속 관계로 구현될 때 전략 패턴을 사용할 수 있습니다.
사용자가 몰라야 하는 데이터를 사용하는 알고리즘이 있을 때, 노출하지 말아야 할 복잡한 자료 구조는 Strategy 클래스에만 두면 되므로 사용자는 몰라도 됩니다.
하나의 클래스가 많은 행동을 정의하고, 이런 행동들이 그 클래스의 연산 안에서 복잡한 다중 조건문의 모습을 취할 때. 많은 조건문보다는 각각을 Strategy 클래스로 옮겨놓는 것이 좋습니다.
3. 구조
4. 참여자
Strategy(Compositor)
제공하는 모든 알고리즘에 대한 공통의 연산들을 인터페이스로 정의합니다.
Context 클래스는 ConcreteStrategy 클래스에 정의한 인터페이스를 통해서 실제 알고리즘을 사용합니다.
ConcreteStrategy
인터페이스를 실제 알고리즘으로 구현합니다.
Context
ContextStrategy 객체를 통해 구성됩니다.
Strategy 객체에 대한 참조자를 관리하고, 실제로는 Strategy 서브클래스의 인스턴스를 갖고 있음으로써 구체화합니다.
또한 Strategy 객체가 자료에 접근해가는 데 필요한 인터페이스를 정의합니다.
5. 결과
동일계열의 관련 알고리즘군이 생깁니다.
서브클래싱을 사용하지 않는 대안입니다.
조건문을 없앨 수 있습니다.
구현의 선택이 가능합니다.
사용자는 서로 다른 전략을 알아야 합니다.
Strategy 객체와 Context 객체 사이에 의사소통 오버헤드가 있습니다.
객체 수가 증가합니다.
6. 구현
Strategy 및 Context 인터페이스를 정의합니다.
전략을 템플릿 매개변수로 사용합니다.
Strategy 객체에 선택성을 부여합니다.
GamSa Ham
안녕하세요. 자바를 좋아하고 디자인 패턴, Refactoring, Clean Code에 관심이 많은 백엔드 개발자입니다.
팔로우
이전 포스트
State
다음 포스트
Template Method
0개의 댓글
댓글 작성