Strategy_pattern
strategy pattern ์ด๋?
Strategy Pattern์ ๊ฐ์ฒด๋ด์์ ํ๋์ ๋ฐ๊ฟ ์ ์๊ณ , original context class ๋ด์์ ์๋ก ์ํธ๊ตํ ํ ์ ์๋ ํจํด์ ์๋ฏธํฉ๋๋ค. ์ฆ, ์๊ณ ๋ฆฌ์ฆ์ ์บก์ํํ์ฌ ๋ณ๊ฒฝ๊ฐ๋ฅํ๋๋ก ํด์ฃผ๋ ๋์์ธ ํจํด์ ์๋ฏธํฉ๋๋ค.
์ ๊ตฌ์กฐ์์ ๊ฐ์ฅ ์์์ ์๋ class๋ฅผ context class๋ผ ํ ๋, context class์ ์ญํ ์ strategy interface๋ฅผ ์ฐธ์กฐํ๋ ๊ฒ์ ๋๋ค. strategy interface ๋ ๋ชจ๋ ๊ฒฌ๊ณ ํ strategies์ ๊ณตํต๋๋ ๋ถ๋ถ์ด๊ณ , ๊ฒฌ๊ณ ํ strategy๋ ์ด๋ค ํ๋์ ํด์ผํ ์ง๋ฅผ ๊ฒฐ์ ํ๋ ๋ถ๋ถ์ ๋๋ค. ์ด๋ ๊ฒ ๋์์ธ์ ๊ตฌ์ฑํ๋ค๋ฉด, context class๋ ๊ฐ strategy๊ฐ ์ด๋ค ์ญํ ์ ํ๋ ์ฐธ์กฐํ๋ strategy๊ฐ ๊ทธ ํ๋์ ์ฌ์ฉํ๋๋ก ๋ก์ง๋ง ๊ตฌ์ฑํ๋ฉด ๋ฉ๋๋ค.
์ strategy pattern์ ์ฌ์ฉํด์ผ ํ๋์ง?
์ต์ ์ ๊ธธ์ ์๋ ค์ฃผ๋ ๋ค๋น๊ฒ์ด์
์ฑ์ด ์๋ค๊ณ ํ๊ฒ ์ต๋๋ค. ์ด ์ฑ์ ํ์ฌ ์๋์ฐจ๋ก ๋ชฉ์ ์ง๊น์ง ๊ฐ ์ ์๋ ์ต์ ์ ๋ฃจํธ๋ฅผ ๊ณ์ฐํ๊ณ ๊ทธ ๋ฃจํธ๋ฅผ ์ฑ์ ๋ณด์ฌ์ค๋๋ค.
|
|
์ฑ์ด ์ปค์ง์ ๋ฐ๋ผ, ๋ง์ ์ฌ์ฉ์๊ฐ ๋ค์ด์ค๊ณ , ์ฌ์ฉ์๋ค์ ๋ค์ํ ๊ธฐ๋ฅ์ ์๊ตฌํ์์ต๋๋ค. ๊ฑธ์์ ๋ ์ต์ ์ ๋ฃจํธ๋ฅผ ์๊ณ ์ถ์ ์ฌ์ฉ์, ์ฌ์ดํด์ ํ์ ๋ ์ต์ ์ ๋ฃจํธ๋ฅผ ์๊ณ ์ถ์ ์ฌ์ฉ์, ๋์ค๊ตํต์ ์ด์ฉํ์ ๋ ์ต์ ์ ๋ฃจํธ๋ฅผ ์๊ณ ์ถ์ ์ฌ์ฉ์... ๊ทธ๋ด ๋๋ง๋ค Navigator ์ฑ์ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ ์ฌ์ฉ์๋ฅผ ์ํ ๊ธฐ๋ฅ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
|
|
๋ค์๊ณผ ๊ฐ์ด ์์์ ํ๊ณ , context class์ ์ ์๋ ๋ฉ์๋๋ฅผ overriding ํ๊ฒ ๋๋ฉด, ๊ฐ ๋ค๋ฅธ ๋์์ ํ ์ ์๊ธด ํ๊ฒ ์ง๋ง ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ ์ ์์ ๋ฟ๋๋ฌ, ์ ์ง๋ณด์ํ๊ธฐ๋ ํ๋ค์ด์ง๋๋ค.
|
|
๋ฐ๋ผ์, Navigator ํด๋์ค๋ interface๋ฅผ ์ฐธ์กฐํ๊ณ , ํ๋์ด ๋ฐ๋ ์ ์๋ ๋ถ๋ถ๋ค์ interface๋ฅผ ๊ฐ๊ฐ ๊ตฌํํ์ฌ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๋ ๊ณผ์ ์์ ์๋์น ์๊ฒ ๋ฐ์ํ๋ ์ผ์ ์ค์ด๋ฉด์ ์์คํ ์ ์ ์ฐ์ฑ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
์ด๋ฐ ๋ฐฉ์์ ์ ์ฉํ๊ธฐ ์ํด์ ๋ฐ๋๋ ๋ถ๋ถ๊ณผ ๋ฐ๋์ง ์๋ ๋ถ๋ถ์ ์๊ฐํด์ผ ํฉ๋๋ค. ๋ชจ๋ ์ฌ์ฉ์๋ ์ถ๋ฐ์ง์ ๋ชฉ์ ์ง๋ฅผ ์ค์ ํ๋ค
๋ ํ๋์ ๋ฐ๋์ง ์๊ธฐ ๋๋ฌธ์ ํด๋น ๊ธฐ๋ฅ์ ๋ชจ๋ strategy class๊ฐ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ฐ ์ฌ์ฉ์๊ฐ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ์ต์ ์ ๋ฃจํธ๋ฅผ ๊ณ์ฐํ๋ ๋ฐฉ์์ ์ฐจ์ด
๊ฐ ์๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฌํ ํ๋์ ๊ฐ strategy class์์ ๊ตฌํํ๋ฉด ๋๊ฒ ์ต๋๋ค.
|
|
strategy pattern์ ์ ์ฉ์ํฌ๋งํ ๊ณณ
- ๋ฐํ์ ์, ๋ค์ํ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉ์ํฌ ํด๋์ค๋ฅผ ๊ตฌํํด์ผ ํ๋ ๊ฒฝ์ฐ
- ๋ฌด์ํ ๋ง์ ํด๋์ค๊ฐ ์กด์ฌํ๋๋ฐ, ๊ทธ ํด๋์ค๋ค์ด ํน์ ํ๋์ ์ ์ธํ๊ณ ๋ ๋น์ทํ ๊ธฐ๋ฅ์ ํ๋ ๊ฒฝ์ฐ
strategy pattern์ ์ฅ๋จ์
- ์ฅ์
open/closed principle
์ ๋ฐ๋ฆ ๋๋ค. ์ฆ, ์๋ก์ด ์ ๋ต์ ์ถ๊ฐํ ๋, context class๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ ์๋ก์ด ์ ๋ต์ ์ถ๊ฐํ ์ ์์ต๋๋ค.Inheritance
๋ฅผComposition
์ผ๋ก ๋์ฒดํ ์ ์์ต๋๋ค.- ๋น์ง๋์ค๋ก์ง์์ ํด๋น ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ ๋, ๊ตฌํ์ฒด๋ฅผ ๋ถ๋ฆฌ์ํฌ ์ ์์ต๋๋ค.
- ๋จ์
- ์ ์ ํ ์ ๋ต์ ์ฌ์ฉํ๊ธฐ ์ํด ์ ๋ต๋ค๊ฐ์ ์ฐจ์ด๋ฅผ ์์์ผ ํ ํ์๊ฐ ์์ต๋๋ค.
lambda
๊ฐ์ ์ต๋ช ํจ์๋ก ์ด๋ฌํ ์ ๋ต์ ๊ตฌํํ์ฌ, ๊ตณ์ด interface, class๋ฅผ ์์ฑํ์ง ์๊ณ ๊ตฌํํ ์ ์์ต๋๋ค.- ์ ์ฉํ strategy pattern ์ด ์ ๊ณ , ์์ฃผ ๋ฐ๋์ง ์๋๋ค๋ฉด ๊ตณ์ด ์ฝ๋๋ฅผ ๋ณต์กํ๊ฒ ๋ง๋ค ํ์๋ ์์ต๋๋ค.