์ด๋ค ๋์์ ํ๋ ๋ก์ง์ ์ ์ํ๊ณ , ์ด๊ฒ๋ค์ ํ๋๋ก ๋ฌถ์ด(์บก์ํ) ๊ด๋ฆฌํ๋ ํจํด
์๋ก์ด ๋ก์ง์ ์ถ๊ฐํ๊ฑฐ๋ ๋ณ๊ฒฝํ ๋, ํ๋ฒ์ ํจ์จ์ ์ผ๋ก ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค.
[ ์ํ
๊ฒ์์ ์ค๊ณํ์์ค ]
์ ๋ ์ข
๋ฅ : ์ ํฌ๊ธฐ, ํฌ๋ฆฌ์ฝฅํฐ
์ ๋๋ค์ ๋ฏธ์ฌ์ผ์ ๋ฐ์ฌํ ์ ์๋ค.
์ ํฌ๊ธฐ๋ ์ง์ ๋ฏธ์ฌ์ผ์, ํฌ๋ฆฌ์ฝฅํฐ๋ ์ ๋ ๋ฏธ์ฌ์ผ์ ๋ฐ์ฌํ๋ค.
ํ์ด๊ธฐ๋ก๋ ํญํ์ด ์๋๋ฐ, ์ ํฌ๊ธฐ์๋ ์๊ณ ํฌ๋ฆฌ์ฝฅํฐ์๋ ์๋ค.
Strategy pattern์ ์ ์ฉํ ์ค๊ณ๋ ์๋์ ๊ฐ๋ค.
์์์ ๋ฌด๋ถ๋ณํ ์์ค ์ค๋ณต์ด ์ผ์ด๋ ์ ์์ผ๋ฏ๋ก, ์ปดํฌ์ง์ ์ ํ์ฉํ๋ค. (์ธํฐํ์ด์ค์ ๋ก์ง์ ํด๋์ค์์ ๊ด๊ณ๋ฅผ ์ปดํฌ์ง์ ํ๊ณ , ์ ๋์์ ์ํฉ์ ๋ง๋ ๋ก์ง์ ์ฐ๊ฒ๋ ์ ๋ํ๋ ๊ฒ)
-
ShootAction๊ณผ BombAction์ผ๋ก ์ธํฐํ์ด์ค๋ฅผ ์ ์ธํ๊ณ , ๊ฐ์ ํ์ํ ๋ก์ง์ ํด๋์ค๋ก ๋ง๋ค์ด implementํ๋ค.
-
Unit์๋ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ฉ์๋๋ค์ด ๋ค์ด์๊ณ , ๋ฏธ์ฌ์ผ๊ณผ ํญํ์ ์ ์ธํ๊ธฐ ์ํด variable๋ก ์ธํฐํ์ด์ค๋ค์ ์ ์ธํ๋ค.
์ ํฌ๊ธฐ์ ํฌ๋ฆฌ์ฝฅํฐ๋ Unit ํด๋์ค๋ฅผ ์์๋ฐ๊ณ , ์์ฑ์์ ๋ง๋ ๋ก์ง์ ์ ์ํด์ฃผ๋ฉด ๋๋๋ค.
class Fighter extends Unit {
private ShootAction shootAction;
private BombAction bombAction;
public Fighter() {
shootAction = new OneWayMissle();
bombAction = new SpreadBomb();
}
}
Fighter.doAttack()
์ ํธ์ถํ๋ฉด, OneWayMissle์ attack()์ด ํธ์ถ๋ ๊ฒ์ด๋ค.
์ด์ฒ๋ผ Strategy Pattern์ ํ์ฉํ๋ฉด ๋ก์ง์ ๋ ๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ด ํธํด์ง๋ค. ๋ก์ง์ ๋ค์ด๊ฐ๋ 'ํ๋'์ ํด๋์ค๋ก ์ ์ธํ๊ณ , ์ธํฐํ์ด์ค์ ์ฐ๊ฒฐํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑํ๋ ๊ฒ!