# Strategy Pattern
Assembled by GimunLee
# Goal
- Strategy Pattern์ ๊ฐ๋ ์ ์ ์ ์๋ค.
- Strategy Pattern์ ์ฌ์ฉ ์ด์ ์ ๋ํด ์ค๋ช ํ ์ ์๋ค.
- Strategy Pattern์ ์ฌ์ฉํ ์ ์๋ค.
# What is Strategy Pattern?
์คํธ๋ํฐ์ง ํจํด(Strategy Pattern)์์๋ ์๊ณ ๋ฆฌ์ฆ๊ตฐ์ ์ ์ํ๊ณ ๊ฐ๊ฐ์ ์บก์ํ
ํ์ฌ ๊ตํํด์ ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋ญ๋๋ค. ์คํธ๋ํฐ์ง ํจํด(Strategy Pattern)์ ํ์ฉํ๋ฉด ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ ํด๋ผ์ด์ธํธ์๋ ๋
๋ฆฝ์ ์ผ๋ก ์๊ณ ๋ฆฌ์ฆ์ ๋ณ๊ฒฝ
ํ ์ ์์ต๋๋ค.
์ด๋ฒ ์ฅ์์๋ ์ฃผ์ด์ง ์๊ตฌ์ฌํญ์ ๊ตฌํํ๋ฉด์ Strategy Pattern์ ์ฌ์ฉ ์ด์ ๊ณผ ๊ตฌํ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
# ์๊ตฌ์ฌํญ
๊ณ ๊ฐ A๊ฐ ์ค๋ฆฌ ์ฐ๋ชป ์๋ฎฌ๋ ์ด์ ๊ฒ์์ ๋ง๋ค์ด๋ฌ๋ผ๊ณ ์๊ตฌํ๊ณ ์์ต๋๋ค.
๊ณ ๊ฐ A : 'SimpleUDuck'์ด๋ผ๋ ์ค๋ฆฌ ์ฐ๋ชป ์๋ฎฌ๋ ์ด์ ๊ฒ์์ ๋ง๋ค์ด์ฃผ์ธ์. ์ด ๊ฒ์์์๋ ํค์๋ ์น๊ณ ๊ฝฅ๊ฝฅ๊ฑฐ๋ฆฌ๋ ์๋ฆฌ๋ ๋ด๋ ๋งค์ฐ ๋ค์ํ ์ค๋ฆฌ ์ข ๋ฅ๋ฅผ ๋ณด์ฌ์ค์ผํฉ๋๋ค.
์ฌ๋ฌ๋ถ์ด๋ผ๋ฉด 'SimpleUDuck' ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๋ป๊ฒ ๊ตฌํํ์ค ๊ฒ ๊ฐ๋์?
# ํ์ค์ ์ธ ๊ฐ์ฒด์งํฅ ๊ธฐ๋ฒ ์ฌ์ฉํ๊ธฐ
์ด ์๋ขฐ๋ฅผ ๋งก์ ๊ฐ๋ฐ์๋ฅผ ์กฐ(Joe)๋ผ๊ณ ํด๋ณด๊ฒ ์ต๋๋ค. ์กฐ๋ ํ์ค์ ์ธ ๊ฐ์ฒด์งํฅ ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ Duck์ด๋ผ๋ ์ํผํด๋์ค๋ฅผ ๋ง๋ ๋ค์, ๊ทธ ํด๋์ค๋ฅผ ํ์ฅํ์ฌ ๋ค๋ฅธ ๋ชจ๋ ์ข ๋ฅ์ ์ค๋ฆฌ๋ฅผ ๋ง๋ค์ด๋ณด์์ต๋๋ค.
์ฌ๋ฌ๋ถ๋ค์ด ๋ณด๊ธฐ์ ์ด๋ค๊ฐ์? ๊ทธ๋ค์ง ๋ฌธ์ ๊ฐ ์์ด๋ณด์ด์๋์? ์ด๋, ๊ณ ๊ฐ A๋ ์ถ๊ฐ ์๊ตฌ์ฌํญ์ ๋งํฉ๋๋ค.
๊ณ ๊ฐ A : ์ค๋ฆฌ๊ฐ ํค์๋ง ์น๋๊ฒ ์๋๋ผ ๋ ์๋ค๋ ์ผ๋ฉด ์ข๊ฒ ์ด์!
๊ฐ๋ฐ์ ์กฐ๋ Duck์ด๋ผ๋ ์ํผํด๋์ค์ fly()๋ผ๋ ํจ์๋ง ๊ตฌํํ๋ฉด ๋์ง! ๋ผ๋ฉฐ ์๋์ ๊ฐ์ด ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ๊ฒ ๋ฉ๋๋ค.
๊ทธ๋ฐ๋ฐ ๊ณ ๊ฐ A๋ ํ๊ฐ๋ ์กฐ์๊ฒ ํ๋ฅผ ๋์ต๋๋ค. ํด๋น ํ๋ก๊ทธ๋จ์ ๋ฐ๋ชจํ ๋, ๊ณ ๋ฌด ์ฅ๋๊ฐ ์ค๋ฆฌ๊ฐ ๋ ๋ผ๋ค๋ ๋ค๋ฉด์ ๋ง์ด์ฃ .
๋ฌธ์ ๋ Duck์ด๋ผ๋ ์ํผํด๋์ค์ fly()๊ฐ ์ถ๊ฐ๋๋ฉด์ ์ผ๋ถ ์๋ธํด๋์ค์๋ ์ ํฉํ์ง ์์ ํ๋์ด ์ ๋ถ ์ถ๊ฐ๋ ๊ฒ์ ๋๋ค. ์์์ ์ ํ์ฉํ์ฌ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ ์ ์์๋ค๊ณ ์๊ฐํ์ง๋ง, ์ค์ ์ฝ๋์์๋ ์ฌ๊ฐํ ์ค๋ฅ๋ฅผ ๋ฐ์์ํฌ ์ ์๋ค๋ ๊ฒ์ ๊ฐ๊ณผํ ๊ฒ์ ๋๋ค.
์กฐ๋ ์๋์ ๊ฐ์ด RubberDuck ํด๋์ค์ fly()๋ฅผ ์ค๋ฒ๋ผ์ด๋ํด์ ์๋ฌด๊ฒ๋ ์ํ๊ฒ ๊ตฌํํด๋ด ๋๋ค.
์ด๋, ๋ง์ฝ ์ธ์ง๋ ๋ ์ง๋ ๋ชปํ๋ ๋๋ฌด๋ก ๋ ๊ฐ์ง ์ค๋ฆฌ๋ฅผ ์ถ๊ฐํ๊ฒ ๋๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น์? ์๋์ ๊ฐ์ด quack()๊ณผ fly()์ ์๋ฌด๊ฒ๋ ํ์ง ์๋๋ก ๊ตฌํํ๋ฉด ๋ ๊น์?
์์ ๊ฐ์ด ๊ฐ๋ฐํ๋ค๋ฉด ์ํผํด๋์ค์ ํจ์๊ฐ ํ์์๋ ์๋ธํด๋์ค๋ฅผ ๋ง๋ค๋ ๋ถํ์ํ ์์ค์ฝ๋๋ฅผ ์์ฑํด์ผํฉ๋๋ค. ๊ฐ๋ฐ์ ์กฐ๋ ์ํผํด๋์ค์ ์๋ ํจ์๋ฅผ ์ธํฐํ์ด์ค๋ก ์๋์ ๊ฐ์ด ๊ตฌํํด๋ณด๊ธฐ๋ก ํ์ต๋๋ค.
์ด๋ฌํ ์ธํฐํ์ด์ค ๋ฐฉ์์ Flyable์ด๋ผ๋ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค๋ฉด '๋ ์ ์๋' ํ๋์ ๋ํ ์ฝ๋ ์ฌ์ฌ์ฉ์ ์ ํ ๊ธฐ๋ํ ์ ์๊ฒ ๋๋ฏ๋ก, ์ฝ๋ ๊ด๋ฆฌ๋ฉด์์ ์ปค๋ค๋ ๋ฌธ์ ์ ์ด ์๊ธฐ๊ฒ ๋ฉ๋๋ค. (์ธํฐํ์ด์ค์์๋ ๊ตฌํ์ฒด๋ง ๋ง๋ค์ ์์ต๋๋ค.)
๊ฐ๋ฐ์ ์กฐ๋ ์์(ํด๋์ค, ์ธํฐํ์ด์ค)์ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ทธ๋ฆฌ ์ฑ๊ณต์ ์ด์ง ๋ชปํ๋ค๋ ๊ฒ์ ์ด์ ํ์คํ ์์์ต๋๋ค. ์๋ธํด๋์ค๋ง๋ค ์ค๋ฆฌ์ ํ๋์ด ๋ฐ๋ ์ ์๋๋ฐ๋ ๋ชจ๋ ์๋ธํด๋์ค์์ ํ ํ๋์ ์ฌ์ฉํ๋๋ก ํ๋ ๊ฒ์ ๊ทธ๋ฆฌ ์ฌ๋ฐ๋ฅด์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ฒ์์๋ ๊ด์ฐฎ์๋ณด์์ง๋ง, ์๋ฐ ์ธํฐํ์ด์ค์๋ ๊ตฌํ๋ ์ฝ๋๊ฐ ์ ํ ๋ค์ด๊ฐ์ง ์๊ธฐ ๋๋ฌธ์ ์ฝ๋ ์ฌ์ฌ์ฉ์ ํ ์ ์๋ค๋ ๋ฌธ์ ์ ์ด ์์์ต๋๋ค. ์ฆ ํ๋์ ๋ฐ๊ฟ ๋๋ง๋ค ๊ทธ ํ๋์ด ์ ์๋์ด ์๋ ์๋ก ๋ค๋ฅธ ์๋ธํด๋์ค๋ค์ ์ ๋ถ ์ฐพ์์ ์ฝ๋๋ฅผ ์ผ์ผ์ด ๊ณ ์ณ์ผ ํฉ๋๋ค.
๊ทธ๋ผ ๋์ฒด ์ด๋ป๊ฒ ํด์ผํ ๊น์? ์ด๋ ์ฌ์ฉํ๋ ๊ฒ์ด Strategy Pattern
์
๋๋ค. ๋ฌด์์ธ์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง, ์ด๋ค ์ํฉ์์ ์ฌ์ฉํด์ผํ๋์ง ๊ฐ์ด ์ค๊ณ ๊ณ์ค๊ฒ๋๋ค. ์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
# ๋ค์ด๊ฐ๊ธฐ ์ ์
์ฐ์ Strategy Pattern์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋ช๊ฐ์ง ๋์์ธ ์์น์ ์์์ผํ ํ์๊ฐ ์์ต๋๋ค.
๋์์ธ ์์น 1. ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฌ๋ผ์ง๋ ๋ถ๋ถ์ ์ฐพ์๋ด๊ณ , ๋ฌ๋ผ์ง์ง ์๋ ๋ถ๋ถ์ผ๋ก๋ถํฐ ๋ถ๋ฆฌ์ํจ๋ค.
์ฆ, ์ฝ๋์ ์๋ก์ด ์๊ตฌ์ฌํญ์ด ์์ ๋๋ง๋ค ๋ฐ๋๋ ๋ถ๋ถ์ด ์๋ค๋ฉด, ๊ทธ ํ๋์ ๋ฐ๋์ง ์๋ ๋ค๋ฅธ ๋ถ๋ถ์ผ๋ก๋ถํฐ ๊ณจ๋ผ๋ด์ ๋ถ๋ฆฌํด์ผ ํ๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
์ด ์์น์ ๋ค์๊ณผ ๊ฐ์ ์์ผ๋ก ์๊ฐํ ์๋ ์์ต๋๋ค.
๋ฐ๋๋ ๋ถ๋ถ์ ๋ฐ๋ก ๋ฝ์์ ์บก์ํ
์ํจ๋ค. ๊ทธ๋ ๊ฒ ํ๋ฉด ๋์ค์ ๋ฐ๋์ง ์๋ ๋ถ๋ถ์๋ ์ํฅ์ ๋ฏธ์น์ง ์์ ์ฑ๋ก ๊ทธ ๋ถ๋ถ๋ง ๊ณ ์น๊ฑฐ๋ ํ์ฅํ ์ ์๋ค.
์ ๊ฐ๋ ์ ๋งค์ฐ ๊ฐ๋จํ์ง๋ง ๋ค๋ฅธ ๋ชจ๋ ๋์์ธ ํจํด์ ๊ธฐ๋ฐ์ ์ด๋ฃจ๋ ์์น์ ๋๋ค.
# Strategy Pattern ์ฌ์ฉํ๊ธฐ
# 1. ๋ฐ๋๋ ๋ถ๋ถ๊ณผ ๊ทธ๋ ์ง ์์ ๋ถ๋ถ ๋ถ๋ฆฌํ๊ธฐ
์ง๊ธ๊น์ง ์ดํด๋ณธ ๋ฐ๋ก fly() ๋ฌธ์ ๋ฅผ ์ ์ธํ๋ฉด Duck ํด๋์ค๋ ์ ์๋ํ๊ณ ์์ผ๋ฉฐ, ๋๋จธ์ง ๋ถ๋ถ์ ์์ฃผ ๋ฌ๋ผ์ง๊ฑฐ๋ ๋ฐ๋์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ช๊ฐ์ง ์์ํ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ธํ๋ฉด Duck ํด๋์ค๋ ๊ทธ๋๋ก ๋๋ ๊ฒ ์ข์ต๋๋ค.
๋ณํํ๋ ๋ถ๋ถ
๊ณผ ๊ทธ๋๋ก ์๋ ๋ถ๋ถ
์ ๋ถ๋ฆฌํ๋ ค๋ฉด (Duckํ๊ณ ๋ ์์ ํ ๋ณ๊ฐ๋ก) ๋ ๊ฐ์ ํด๋์ค ์งํฉ์ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ํ๋๋ ๋๋ ๊ฒ๊ณผ ๊ด๋ จ๋ ์งํฉ์ด๊ณ , ๋ค๋ฅธ ํ๋๋ ๊ฝฅ๊ฝฅ๊ฑฐ๋ฆฌ๋ ๊ฒ๊ณผ ๊ด๋ จ๋ ๋ถ๋ถ์
๋๋ค. ๊ฐ ํด๋์ค ์งํฉ์๋ ๊ฐ๊ฐ์ ํ๋์ ๊ตฌํํ ๊ฒ์ ์ ๋ถ ์ง์ด๋ฃ์ต๋๋ค.
์๋ฅผ ๋ค์ด, ๊ฝฅ๊ฝฅ๊ฑฐ๋ฆฌ๋ ๊ฒ์ ๊ตฌํํ๋ ํด๋์ค๋ฅผ ํ๋ ๋ง๋ค๊ณ , ๋นฝ๋นฝ๊ฑฐ๋ฆฌ๋ ๊ฒ์ ๊ตฌํํ๋ ํด๋์ค๋ฅผ ํ๋ ๋ง๋ค๊ณ , ์๋ฌด ์๋ฆฌ๋ ๋ด์ง ์๋ ๊ฒ์ ๊ตฌํํ๋ ํด๋์ค๋ฅผ ํ๋ ๋ง๋๋ ์์ผ๋ก ๋ง์ ๋๋ค.
**๊ทธ๋ ๋ค๋ฉด ๋๋ ํ๋๊ณผ ๊ฝฅ๊ฝฅ๊ฑฐ๋ฆฌ๋ ํ๋์ ๊ตฌํํ๋ ํด๋์ค ์งํฉ์ ์ด๋ป๊ฒ ๋์์ธํด์ผํ ๊น์? **
์ฐ์ ์ต๋ํ ์ ์ฐํ ํด๋์ค ์งํฉ์ ๋ง๋๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ ์ด์ ์ด๋ฐ ๋ฌธ์ ์ ๋ง๋ ค๋ ๊ฒ ์ค๋ฆฌ์ ํ๋๊ณผ ๊ด๋ จ๋ ์ ์ฐ์ฑ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
์๋ฅผ ๋ค์ด, MallardDuck ์ธ์คํด์ค๋ฅผ ์๋ก ๋ง๋ค๊ณ ํน์ ํ์์ ๋๋ ํ๋์ผ๋ก ์ด๊ธฐํํ๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์ผ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ค๋ฆฌ์ ํ๋์ ๋์ ์ผ๋ก ๋ฐ๊ฟ ์ ์์ผ๋ฉด ๋ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ์ฆ Duck ํด๋์ค์ ํ๋๊ณผ ๊ด๋ จ๋ ์ธํฐ(setter) ๋ฉ์๋๋ฅผ ํฌํจ์์ผ์ ํ๋ก๊ทธ๋จ ์คํ์ค์๋ MallardDuck์ ๋๋ ํ๋์ ๋ฐ๊ฟ ์ ์๋๋ก ํ๋ฉด ์ข์ ๊ฒ์ ๋๋ค.
์ผ๋จ ์ด๋ ๊ฒ ๋ชฉํ๋ฅผ ์ ํด๋์ ๋ค์, ๋ค์๊ณผ ๊ฐ์ ๋ ๋ฒ์งธ ๋์์ธ ์์น์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
# 2. ๊ตฌํ์ด ์๋ ์ธํฐํ์ด์ค์ ๋ง์ถฐ์ ํ๋ก๊ทธ๋๋ฐํ๊ธฐ
๋์์ธ ์์น 2. ๊ตฌํ์ด ์๋ ์ธํฐํ์ด์ค์ ๋ง์ถฐ์ ํ๋ก๊ทธ๋๋ฐํ๋ค.
๊ฐ ํ๋์ ์ธํฐํ์ด์ค๋ก ํํํ๊ณ ํ๋์ ๊ตฌํํ ๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋๋ก ํฉ๋๋ค. ์ด์ ๋๋ ํ๋์ ์ด์ Duck ํด๋์ค์์ ๊ตฌํํ์ง ์์ต๋๋ค. ๋์ ํน์ ํ๋๋ง์ ๋ชฉ์ ์ผ๋ก ํ๋ ํด๋์ค์ ์งํฉ์ ๋ง๋ญ๋๋ค.
ํ๋ ์ธํฐํ์ด์ค๋ Duck ํด๋์ค๊ฐ ์๋, ๋ฐฉ๊ธ ์ค๋ช ํ ํ๋ ํด๋์ค์์ ๊ตฌํํฉ๋๋ค. ์๋ก์ด ๋์์ธ์ ์ฌ์ฉํ๋ฉด Duck์ ์๋ธํด๋์ค์์๋ ์ธํฐํ์ด์ค๋ก ํํ๋๋ ํ๋์ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ผ์ ํ๋์ ์ค์ ๋ก ๊ตฌํํ ๊ฒ์ Duck ์๋ธํด๋์ค์ ๊ตญํ๋์ง ์์ต๋๋ค.
์ด๋ฐ์์ผ๋ก ๋์์ธํ๋ฉด ๋ค๋ฅธ ํ์์ ๊ฐ์ฒด์์๋ ๋๋ ํ๋์ ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ธฐ์กด์ ํ๋ ํด๋์ค๋ฅผ ์์ ํ๊ฑฐ๋ ๋ ์๋ค๋๋ ํ๋์ ์ฌ์ฉํ๋ Duck ํด๋์ค๋ฅผ ์ ํ ๊ฑด๋๋ฆฌ์ง ์๊ณ ๋ ์๋ก์ด ํ๋์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
์ฆ, ์ค์ํ ๊ฒ์ ์ด์ Duck์์ ๋๋ ํ๋์ Duck ํด๋์ค์์ ์ ์ํ ๋ฉ์๋๋ฅผ ์จ์ ๊ตฌํํ์ง ์๊ณ ๋ค๋ฅธ ํด๋์ค์ ์์ํ๋ค๋ ๊ฒ์ ๋๋ค.
# 3. Duck ํด๋์ค์ ๋๋ ํ๋ ํตํฉํ๊ธฐ
์ฐ์ Duck ํด๋์ค์ flyBehavior๋ผ๋ ์ธํฐํ์ด์ค ํ์์ ์ธ์คํด์ค ๋ณ์๋ฅผ ์ถ๊ฐํ ๊ฒ์ ๋๋ค.
๊ฐ Duck ๊ฐ์ฒด์์๋ ์คํ ์์ ์ด ๋ณ์์ ํน์ ํ๋ ํ์(FlyWithWings, FlyNoWay..)์ ๋ํ ๋ ํผ๋ฐ์ค๋ฅผ ๋คํ์ ์ผ๋ก ์ค์ ํฉ๋๋ค.
๊ทธ ๋ค์ performFly()๋ฅผ ๊ตฌํํด๋ณด๊ฒ ์ต๋๋ค.
public class Duck { // FlyBehavior ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๋ ํผ๋ฐ์ค FlyBehavior flyBehavior; // flyBehavior๋ก ์ฐธ์กฐ๋๋ ๊ฐ์ฒด์ ๊ทธ ํ๋์ ์์ public void performFly(){ flyBehavior.fly(); } }
์ง๊ธ ์ด ์ฝ๋์์๋ ๊ฐ์ฒด์ ์ข ๋ฅ์๋ ์ ํ ์ ๊ฒฝ ์ธ ํ์๊ฐ ์์ต๋๋ค. fly()๋ฅผ ์คํ์ํฌ ์ค ์๋ค๋ ๊ฒ์ด ์ค์ํ ๋ฟ์ ๋๋ค.
flyBehavior ์ธ์คํด์ค ๋ณ์๋ฅผ ์ค์ ํ๋ MallardDuck ํด๋์ค๋ฅผ ๋ง๋ค์ด๋ด ๋๋ค.
public class MallardDuck extends Duck {
public MallardDuck(){
flyBehavior = new FlyWithWings();
}
public void display() {
System.out.println("์ ๋ ๋ฌผ์ค๋ฆฌ์
๋๋ค.");
}
}
MallardDuck ์์ฑ์์์๋ flyBehavior ์ธ์คํด์ค ๋ณ์์ FlyWithWings ํ์์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด์ ๋์ ํฉ๋๋ค.
๊ฐ ์ค๋ฆฌ์๋ FlyBehavior๊ฐ ์์ผ๋ฉฐ, ๋๋ ํ๋์ ์์ ๋ฐ์ต๋๋ค. ํด๋์ค๋ฅผ ์ด๋ฐ ์์ผ๋ก ํฉ์น๋ ๊ฒ์ ๊ตฌ์ฑ(Composition)์ ์ด์ฉํ๋ ๊ฒ์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ์ฌ๊ธฐ์ ๋์์๋ Duck ํด๋์ค์์๋ ํ๋์ ์์๋ฐ๋ ๋์ , ์ฌ๋ฐ๋ฅธ ํ๋ ๊ฐ์ฒด๋ก ๊ตฌ์ฑ๋จ์ผ๋ก์จ ํ๋์ ๋ถ์ฌ๋ฐ๊ฒ ๋ฉ๋๋ค.
# 4. "A๋ B์ด๋ค" ๋ณด๋ค "A์๋ B๊ฐ ์๋ค"๊ฐ ๋์ ์๋ ์์ต๋๋ค.
๋์์ธ ์์น 3. ์์๋ณด๋ค๋ ๊ตฌ์ฑ์ ํ์ฉํ๋ค.
์ง๊ธ๊น์ง ๋ด ์๋ ๊ฒ์ฒ๋ผ, ๊ตฌ์ฑ์ ์ด์ฉํ์ฌ ์์คํ ์ ๋ง๋ค๋ฉด ์ ์ฐ์ฑ์ ์ฟ ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค. ๋จ์ํ ์๊ณ ๋ฆฌ์ฆ๊ตฐ์ ๋ณ๋์ ํด๋์ค์ ์งํฉ์ผ๋ก ์บก์ํํ ์ ์๋๋ก ๋ง๋ค์ด์ฃผ๋ ๊ฒ ๋ฟ ์๋๋ผ, ๊ตฌ์ฑ์์๋ก ์ฌ์ฉํ๋ ๊ฐ์ฒด์์ ์ฌ๋ฐ๋ฅธ ํ๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ธฐ๋ง ํ๋ฉด ์คํ์์ ํด๋์ ๋ฐ๊ฟ ์๋ ์๊ฒ ํด์ค๋๋ค.
# References
- Head First Design Patterns
- ์คํธ๋ํฐ์ง ํจํด
- Strategy Pattern | Head First Design Patterns