Strategy Pattern
Strategy Pattern (์คํธ๋ํฐ์ง ํจํด)
๋ณ๊ฒฝ์ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ
์ผ๋ถ๋ฅผ ์์ ํ์ ๋ ์ ์ฒด๋ฅผ ์ปดํ์ผ/๋น๋ํด์ผ ํ๋ ์ํํธ์จ์ด๋ฅผ ๊ฐ๋ฐํ๋ ๊ฒ์ ์ฅ๊ธฐ์ ์ํ์ผ๋ก ์ด์ด์ง๋ค. ๋ฐ๋ผ์ ๋ณ๊ฒฝ์ ์ํ ์ค๊ณ๋ฅผ ํด์ผ ํ๋ค.
์ด๋ ๋ค์์ ์ํด ์ด๋ฃจ์ด์ง๋ค.
์ถ์์ ์ธ ๊ฒ(์ธํฐํ์ด์ค)์ ์์กดํ๊ณ , ๊ตฌ์ฒด์ ์ธ ๊ฒ(๊ตฌํ๋ฌผ)์ ์์กดํ์ง ๋ง์์ผ ํ๋ค.
์์(extend)๋ณด๋ค๋ ์งํฉ(aggregation, ๋ด๋ถ์ field๋ก ํฌํจํ๋ ๊ฒ)์ ์ ์ฉํด์ผ ํ๋ค.
์ค๊ณ ์ ๋ณํ ๋ถ๋ถ๊ณผ ๋ณํ์ง ์์ ๋ถ๋ถ์ ์ ๋ถ๋ฆฌํด์ผ ํ๋ค.
์ฌ์ค๊ณ์ ์์ธ์ด ๋ฌด์์ผ์ง์ ์ด์ ์ ๋๋ค.
์์ฃผ ๋ณํ๋ ๊ฐ๋ ์ ์บก์ํํ๋ค.
ํจํด ๋ ๋ฒจ์์ ๋ณ๊ฒฝ์ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ - ์คํธ๋ํฐ์ง ํจํด
์คํธ๋ํฐ์ง ํจํด
์ด๋, ๋ณํ๋ ์๊ณ ๋ฆฌ์ฆ ํจ๋ฐ๋ฆฌ๋ฅผ ์ ์ํ๊ณ ๊ฐ๊ฐ์ ์บก์ํํ ๋ค, ์ด๋ฅผ ๋ค๋ฅธ ํด๋์ค๊ฐ ํฌํจํ๊ฒ ๋ง๋๋ ์ค๊ณ ๊ธฐ๋ฒ์ด๋ค.
์คํธ๋ํฐ์ง ํจํด
์ ๋์ผํ ๋ฌธ์ ๋ฅผ ๋ค๋ฃจ๋ ์ฌ๋ฌ ์๊ณ ๋ฆฌ์ฆ์ด ํ๋์ ์ธํฐํ์ด์ค(Strategy)๋ฅผ ๊ตฌํํ๋๋ก ํ์ฌ, ํ์ํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ฝ๊ฒ ๋์ฒดํ ์ ์๋๋ก ํ๋ค.
๊ตฌ์ฑ ์์

Context
- ์ ๋ต์ ์ด์ฉํ๋ ๊ฐ์ฒด. ์ ๋ต์ ๊ต์ฒดํ๊ธฐ ์ํ setter ๋ฉ์๋๋ฅผ ๊ฐ์ง๋ค.Strategy
- ์ธ๋ถ๋ก๋ถํฐ ๋์ผํ ๋ฐฉ์์ผ๋ก ์๊ณ ๋ฆฌ์ฆ(์ ๋ต)์ ํธ์ถํ ์ ์๋๋ก ํ๊ธฐ ์ํ ์ธํฐํ์ด์ค/์ถ์ ํด๋์คConcreteStrategy
- ๊ตฌ์ฒด์ ์๊ณ ๋ฆฌ์ฆ๋ค์ด ์ ์๋๋ ํด๋์ค
ํน์ง
๋จ์ ํ ์คํธ์์ ํน์ ์ปดํฌ๋ํธ(๋ฏธ๊ฐ๋ฐ)์ ํ ์คํ ํ๊ณ ์ ํ ๋ ์ผ๋จ Stub์ ์ด์ฉํ๊ณ ์ดํ ๊ฐ๋ฐ๋ ๊ฒ์ผ๋ก ๋์ฒดํ๊ธฐ ์ํด ์ด ํจํด์ ์ฌ์ฉํ ์ ์๋ค.
Last updated