[Design Pattern] Strategy Pattern
Strategy pattern
์ผ๋ช
, ์ ๋ตํจํด
๋ชฉ์
- ๊ฐ๊ฐ์ ์บก์ํํ์ฌ ๋ณํ ๊ฐ๋ฅํ๊ฒ ๋ง๋ ์๊ณ ๋ฆฌ์ฆ์ ์งํฉ์ ์ ์ํ๋ค.
- ์ธํฐํ์ด์ค์ ์ถ์ ๋ฉ์๋๋ฅผ ์ ์ํ๊ณ , ์์ธํ ๊ตฌํ์ ํ์๋ ํด๋์ค์ ํ๋ค.
- Strategy ํจํด์ ์๊ณ ๋ฆฌ์ฆ์ด ๊ทธ๊ฒ์ ์ฌ์ฉํ๋ ํด๋ผ์ด์ธํธ์ ๋ ๋ฆฝ์ ์ผ๋ก ๋ณํํ ์ ์๊ฒ ํด์ค๋ค. โ OCP
OCP(Open-Closed Principle;๊ฐ๋ฐฉ ํ์ ์์น) ํ์ฅ์๋ ์ด๋ ค์๊ณ , ์์ ์๋ ๋ซํ ์์ด์ผ ํ๋ค๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํต์ฌ ์์น
ํด๊ฒฐํ ์ ์๋ ๋ฌธ์
ํด๋ผ์ด์ธํธ๋ ๋ณํ์ ๊ด๋ จํด์ ์ ๊ฒฝ์ฐ์ง ์์์ผ ํ๋ค.
โ ํ์๋ ํด๋์ค ์๊ฐ ๋ณํ์ ๊ฒฝ์ฐ, ํ์๋ ํด๋์ค์ ๊ตฌํ์ด ๋ฐ๋์์ ๊ฒฝ์ฐ์ ๋ํ ์ํฅ์ด ์์ด์ผ ํ๋ค.
๊ตฌ์กฐ
2๊ฐ์ง ๊ตฌํ ๋ฐฉ๋ฒ
- Abstract base class
Interface entity(์ ๊ตฌ์กฐ์์์ Interface)๋ฅผ abstract base class๋ก ๋ํ๋ธ๋ค.
โ ์์ ๊ณ์ธต์ด ๋์ ์ธ ๋คํ์ฑ์ ๋ํ๋ธ๋ค.
- ํด๋ผ์ด์ธํธ์ ์ํ method signature(method name + parameters) ์์ธก
โ ์ด ๊ฒฝ์ฐ Interface entity๋ ํด๋ผ์ด์ธํธ์์ template code๊ฐ ๋๊ณ , ์์ ๊ณ์ธต์ ์ ์ ์ธ ๋คํ์ฑ์ ๋ํ๋ธ๋ค. (์ด ๋ฐฉ๋ฒ์ ์ ๋ชจ๋ฅด๊ฒ ์.. ๋ค์ ์ฐพ์๋ณผ ๊ฒ)
์์
์ฝ๋ ์์ ๋ก ์ค๋ช
์ด ์ ๋์ด์๋ ๊ธ
(Abstract base class ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌํํ ์์ )
๋ค๋ฅธ ํจํด๋ค๊ณผ์ ๋น๊ต
-
Strategy ํจํด์ ์์ธํ๊ฒ ๋๋๋ ์ ๋๋ฅผ ์ ์ธํ๋ฉด Template-method ํจํด๊ณผ ๋น์ทํ๋ค.
-
State, Strategy, Bridge ํจํด์ ๋น์ทํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง์ง๋ง ๋ชฉ์ ์ ๋ชจ๋ ๋ค๋ฅด๋ค.
โ ์ฆ, ๊ฐ๊ฐ ๋ค๋ฅธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ -
Strategy ํจํด์ ์ฒซ๋ฒ์งธ ๊ตฌํ ๋ฐฉ๋ฒ(Abstract base class)์ State ํจํด๊ณผ ์ ์ฌํ๋ค.
- ์ฐจ์ด์ : Strategy ํจํด์ ํ๋ฒ ๋ฐ์ธ๋ฉ๋๊ณ , State ํจํด์ ๋์ ์ผ๋ก ์ฌ๋ฌ๋ฒ ๋ฐ์ธ๋ฉ๋๋ค.
โ Strategy ํจํด์ด ์ข ๋ ๊ฐ๋ณ๋ค๊ณ ํ ์ ์๋ค.
- ์ฐจ์ด์ : Strategy ํจํด์ ํ๋ฒ ๋ฐ์ธ๋ฉ๋๊ณ , State ํจํด์ ๋์ ์ผ๋ก ์ฌ๋ฌ๋ฒ ๋ฐ์ธ๋ฉ๋๋ค.
[Reference]
Design Patterns Explained Simply - Alexander Shvets
http://jdm.kr/blog/54
http://www.bitesizedcsharp.com/
Comments