////
Search
⏯️

Strategy pattern(전략 패턴)

전략 패턴이란? 위키 백과 실행 중에 알고리즘을 선택할 수 있게 하는 행위 소프트웨어 디자인 패턴이다. 특징
특정한 계열의 알고리즘들을 정의한다.
각 알고리즘을 캡슐화한다.
이 알고리즘들을 해당 계열 안에서 상호 교체 가능하게 만든다.
솔직히 이렇게 본다면 잘 이해가 안된다. 그래서 필자의 경우는 필자가 이해한 방식으로 전략 패턴을 정의해본다.

전략 패턴을 적용하기 전

만약 아래와 같은 빈 공간의 도형이 있다면 빈공간의 도형을 추상화한 형태로 두고 아래의 2단계 도형처럼 색을 채워 구현할 것이다. 하지만 구현이 더 늘어 난다면? 어떻게 될까? 마지막 도형들처럼 색이 제각각인 도형 구현체를 수도 없이 만들어야한다. 여기서 한 가지 의문이 생길 것이다. 빈 공간의 크기에 맞는 여러 색의 도형을 만들면 되는거 아니야? 이 해답에 도달했으면 더 안 보아도 된다.

전략 패턴을 적용하기

앞선 도형들을 담고 있는 틀을 추상화 시키는 것보다 내부에 모양을 추상화 시켜서 색 별로 만들어서 끼운다. 이렇게 되면 언제든지 다른 도형의 색을 변경 시킬 수 있게 되는 것이다.

전략 패턴 이해하기

전략 패턴의 정의와 클래스 다이어그램을 살펴보자.
전략 패턴이란? 위키 백과 실행 중에 알고리즘을 선택할 수 있게 하는 행위 소프트웨어 디자인 패턴이다.
큰 도형에 작은 도형을 넣을 수 있겠구나 특징
특정한 계열의 알고리즘들을 정의한다.
동그라미, 세모, 다각형 등을 만드는 거구나
각 알고리즘을 캡슐화한다.
모양에 맞게 색을 다르게 칠하구나
이 알고리즘들을 해당 계열 안에서 상호 교체 가능하게 만든다.
실행 중에도 모양만 맞다면 끼워 넣을 수 있구나
클래스 다이어그램
Context - 큰 도형 Strategy - 동그라미, 세모, 다각형 집합 ConcreteStrategyA, ConcreteStrategyB - 동그라미 : {빨간 동그라마, 노란 동그라미, 초록 동그라미}
전략 패턴은 알고리즘군(행위, 할 수 있는 것)을 정의하고 캡슐화해서 각각의 알고리즘군을 수정해서 쓸 수 있게 해준다. 전략 패턴을 사용하면 클라이언트로 부터 알고리즘을 분리해서 독립적으로 사용할 수 있다. 당연하게도 행위를 도형들로 추출했다. 동그라미, 세모, 다각형을 추상화해서 이를 구현하는 실제 색을 입힌 구현체를 만들었다. 그렇게 때문에 클라이언트 입장에서는 동그라미만 알지 무슨 색인지는 모르게 되는 것이다.