๊ฐ์ฒด์งํฅ ์ค๊ณ์ ํต์ฌ์ ์ ์ ํ ํ๋ ฅ์ ์๋ณํ๊ณ ํ๋ ฅ์ ํ์ํ ์ญํ ์ ์ ์ํ ํ์ ์ญํ ์ ์ํํ ์ ์๋ ์ ์ ํ ์ฑ ์์ ํ ๋น ํ๋ ๊ฒ์ด๋ค.
๊ฐ์ฒด์งํฅ ํจ๋ฌ๋ค์์ ๊ด์ ์์ ํต์ฌ์ ์ญํ (role), ์ฑ ์(responsibility), ํ๋ ฅ(collaboration) ์ด๋ค.
๊ตฌํ์ ๋จผ์ ์๊ฐํ์ง ๋ง๊ณ , ์ญํ ๊ณผ ์ฑ ์๊ณผ ํ๋ ฅ์ ๋ํด ๋จผ์ ์๊ฐํ์. ๊ทธ ํ ํ์ํ ๊ฒ์ ์์๊ณผ ๋คํ์ฑ์ ์ด์ฉํ๋ ์ผ์ด๋ค.
๊ฐ์ฒด๋ค์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด ์ํํ๋ ์ํธ์์ฉ์ ํ๋ ฅ์ด๋ผ๊ณ ํ๋ค.
๊ฐ์ฒด๊ฐ ํ๋ ฅ์ ์ฐธ์ฌํ๊ธฐ ์ํด ์ํํ๋ ๋ก์ง์ ์ฑ ์์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ฑ ์์ด๋ ๊ฐ์ฒด์ ์ํด ์ ์๋๋ ์์ง๋ ์๋ ํ์์ ์งํฉ์ผ๋ก, ๊ฐ์ฒด๊ฐ ์ ์งํด์ผ ํ๋ ์ ๋ณด์ ์ํํ ์ ์๋ ํ๋์ ๋ํด ๊ฐ๋ต์ ์ผ๋ก ์์ ํ ๋ฌธ์ฅ์ด๋ค. ์ฆ, ๊ฐ์ฒด์ ์ฑ ์์ ๊ฐ์ฒด๊ฐ '๋ฌด์์ ์๊ณ ์๋๊ฐ' ์ '๋ฌด์์ ํ ์ ์๋๊ฐ'๋ก ๊ตฌ์ฑ๋๋ค. ํฌ๋ ์ด๊ทธ ๋ผ๋ง์ ์ด๋ฌํ ๋ถ๋ฅ ์ฒด๊ณ์ ๋ฐ๋ผ ๊ฐ์ฒด์ ์ฑ ์์ ํฌ๊ฒ 'ํ๋ ๊ฒ'๊ณผ '์๋ ๊ฒ'์ ๋ ๊ฐ์ง ๋ฒ์ฃผ๋ก ๋๋์ด ์ธ๋ถํ ํ๊ณ ์๋ค.
ํ๋ ๊ฒ
- ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฑฐ๋ ๊ณ์ฐ์ ์ํํ๋ ๋ฑ์ด ์ค์ค๋ก ํ๋ ๊ฒ
- ๋ค๋ฅธ ๊ฐ์ฒด์ ํ๋์ ์์์ํค๋ ๊ฒ
- ๋ค๋ฅธ ๊ฐ์ฒด์ ํ๋์ ์ ์ดํ๊ณ ์กฐ์ ํ๋ ๊ฒ
์๋ ๊ฒ
- ์ฌ์ ์ธ ์ ๋ณด์ ๊ดํด ์๋ ๊ฒ
- ๊ด๋ จ๋ ๊ฐ์ฒด์ ๊ดํด ์๋ ๊ฒ
- ์์ ์ด ์ ๋ํ๊ฑฐ๋ ๊ณ์ฐํ ์ ์๋ ๊ฒ์ ๊ดํด ์๋ ๊ฒ
๋ํ ์ค๊ณ๋ฅผ ํ ๋ "์ด ๊ฐ์ฒด๊ฐ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ํฌํจํด์ผ ํ๋๊ฐ?"๋ผ๋ ์ง๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ ๋๊ฐ์ ๊ฐ๋ณ์ ์ผ๋ก ์ง๋ฌธ์ผ๋ก ๋ถ๋ฆฌํด์ผ ํ๋ค.
- ์ด ๊ฐ์ฒด๊ฐ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ํฌํจํด์ผ ํ๋๊ฐ?
- ์ด ๊ฐ์ฒด๊ฐ ๋ฐ์ดํฐ์ ๋ํด ์ํํด์ผ ํ๋ ์คํผ๋ ์ด์ ์ ๋ฌด์์ธ๊ฐ?
์ฑ ์๋ค์ด ๋ชจ์ฌ ๊ฐ์ฒด๊ฐ ์ํํ๋ ์ญํ ์ ๊ตฌ์ฑํ๋ค.
๊ฐ์ฒด๋ ํ๋ ฅ์ด๋ผ๋ ์ฃผ์ด์ง ๋ฌธ๋งฅ ์์์ ํน์ ํ ๋ชฉ์ ์ ๊ฐ๊ฒ ๋๋ค. ๊ฐ์ฒด์ ๋ชฉ์ ์ ํ๋ ฅ ์์์ ๊ฐ์ฒด๊ฐ ๋งก๊ฒ ๋๋ ์ฑ ์์ ์งํฉ์ผ๋ก ํ์๋๋ค. ์ด์ฒ๋ผ ๊ฐ์ฒด๊ฐ ์ด๋ค ํน์ ํ ํ๋ ฅ ์์์ ์ํํ๋ ์ฑ ์์ ์งํฉ์ ์ญํ ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์ค์ ๋ก ํ๋ ฅ์ ๋ชจ๋ธ๋งํ ๋๋ ํน์ ํ ๊ฐ์ฒด๊ฐ ์๋๋ผ ์ญํ ์๊ฒ ์ฑ ์์ ํ ๋นํ๋ค๊ณ ์๊ฐํ๋๊ฒ ์ข๋ค.
์ญํ ์ ๊ตฌํํ๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ ์ถ์ ํด๋์ค์ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ. ์ฑ ์ ์์ ๋ก ๋ค์๋ฉด DiscountPolicy๊ฐ ์ญํ ์ ๋งก๊ณ , NoneDiscountPolicy๊ฐ ์ญํ ์ ๊ตฌํํ์.
๊ฐ์ฒด์ ๊ดํด ์๊ฐํ ๋ "์ด ๊ฐ์ฒด๊ฐ ๋ฌด์จ ์ญํ ์ ์ํํด์ผ ํ๋๊ฐ?" ๋ผ๊ณ ์๋ฌธํ๋ ๊ฒ์ด ๋์์ด ๋๋ค.
์ข์ ์ค๊ณ๋ฅผ ๊ฐ๊ธฐ ์ํด ๋์ ์์ง๋์ ๋ฎ์ ๊ฒฐํฉ๋๋ฅผ ๊ฐ์ง ์ค๊ณ๋ฅผ ์ถ๊ตฌํด์ผํ๋ค.
ํ๋์ ๋ณ๊ฒฝ์ ์์ฉํ๊ธฐ ์ํด ๋ชจ๋ ์ ์ฒด๊ฐ ํจ๊ป ๋ณ๊ฒฝ๋๋ค๋ฉด ์์ง๋๊ฐ ๋์ ๊ฒ์ด๊ณ ๋ชจ๋์ ์ผ๋ถ๋ง ๋ณ๊ฒฝ๋๋ค๋ฉด ๋ฎ์ ๊ฒ์ด๋ค.
์ํ์ ํ๋์ ํ๋์ ๊ฐ์ฒด ์์ ๋ชจ์ผ๋ ์ด์ ๋ ๊ฐ์ฒด์ ๋ด๋ถ ๊ตฌํ์ ์ธ๋ถ๋ก๋ถํฐ ๊ฐ์ถ๊ธฐ ์ํด์๋ค. ์ฌ๊ธฐ์ ๊ตฌํ์ด๋ ๋์ค์ ๋ณ๊ฒฝ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ ์ด๋ค ๊ฒ์ ๊ฐ๋ฆฌํจ๋ค. ๊ฐ์ฒด์งํฅ์ด ๊ฐ๋ ฅํ ์ด์ ๋ ํ ๊ณณ์์ ์ผ์ด๋ ๋ณ๊ฒฝ์ด ์ ์ฒด ์์คํ ์ ์ํฅ์ ๋ผ์น์ง ์๋๋ก ํ๊ธํจ๊ณผ๋ฅผ ์ ์ ํ๊ฒ ์กฐ์ ํ ์ ์๋ ์ฅ์น๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ์ด ๋์ ๋ถ๋ถ์ ๋ด๋ถ์ ์จ๊ธฐ๊ณ ์ธ๋ถ์๋ ์๋์ ์ผ๋ก ์์ ์ ์ธ ๋ถ๋ถ๋ง ๊ณต๊ฐํจ์ผ๋ก์จ ๋ณ๊ฒฝ์ ์ฌํ๋ฅผ ํต์ ํ ์ ์๋ค.
๋ณ๊ฒฝ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ ๋ถ๋ถ์ ๊ตฌํ์ด๋ผ๊ณ ๋ถ๋ฅด๊ณ ์๋์ ์ผ๋ก ์์ ์ ์ธ ๋ถ๋ถ์ ์ธํฐํ์ด์ค๋ผ๊ณ ๋ถ๋ฅธ๋ค๋ ์ฌ์ค์ ๊ธฐ์ตํ๋ผ. ๊ฐ์ฒด๋ฅผ ์ค๊ณํ๊ธฐ ์ํ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์์ด๋์ด๋ ๋ณ๊ฒฝ์ ์ ๋์ ๋ฐ๋ผ ๊ตฌํ๊ณผ ์ธํฐํ์ด์ค๋ฅผ ๋ถ๋ฆฌํ๊ณ ์ธ๋ถ์์๋ ์ธํฐํ์ด์ค์๋ง ์์กดํ๋๋ก ๊ด๊ณ๋ฅผ ์กฐ์ ํ๋ ๊ฒ์ด๋ค.
์ ๋ฆฌํ๋ฉด ์บก์ํ๋ ๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ์ด ๋์ ๋ถ๋ถ์ ๊ฐ์ฒด ๋ด๋ถ๋ก ์จ๊ธฐ๋ ์ถ์ํ ๊ธฐ๋ฒ์ด๋ค. ๊ฐ์ฒด ๋ด๋ถ์ ๋ฌด์์ ์บก์ํํด์ผ ํ๋๊ฐ? ๋ณ๊ฒฝ๋ ์ ์๋ ์ด๋ค ๊ฒ์ด๋ผ๋ ์บก์ํํด์ผ ํ๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ๊ฐ์ฒด์งํฅ ์ค๊ณ์ ํต์ฌ์ด๋ค.
์ ์ฐํ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋จ์ ์ํด์๋ ์ปดํ์ผ ์๊ฐ ์์กด์ฑ๊ณผ ์คํ ์๊ฐ ์์กด์ฑ์ด ๋ฌ๋ผ์ผ ํ๋ค.
๋ง์ฝ ๋ฐ์ดํฐ ์ค์ฌ์ ์ค๊ณ๋ฅผ ํ๊ฒ ๋๋ค๋ฉด ๋๋ฌด ์ด๋ฅธ ์๊ธฐ์ ๋ฐ์ดํฐ์ ๋ํด ๊ณ ๋ฏผํ๊ธฐ ๋๋ฌธ์ ์บก์ํ์ ์คํจํ๊ฒ ๋๋ค.
๊ฐ์ฒด A๋ฅผ ์์ฑํด์ผ ํ ๋ ์ด๋ค ๊ฐ์ฒด์๊ฒ ๊ฐ์ฒด ์์ฑ ์ฑ ์์ ํ ๋นํด์ผ ํ๋๊ฐ? ์๋ ์กฐ๊ฑด์ ์ต๋ํ ๋ง์ด ๋ง์กฑํ๋ B์๊ฒ ๊ฐ์ฒด ์์ฑ ์ฑ ์์ ํ ๋นํ๋ผ.
- B๊ฐ A ๊ฐ์ฒด๋ฅผ ํฌํจํ๊ฑฐ๋ ์ฐธ์กฐํ๋ค.
- B๊ฐ A ๊ฐ์ฒด๋ฅผ ๊ธฐ๋กํ๋ค.
- B๊ฐ A ๊ฐ์ฒด๋ฅผ ๊ธด๋ฐํ๊ฒ ์ฌ์ฉํ๋ค.
- B๊ฐ A ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํํ๋ ๋ฐ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.( ์ด ๊ฒฝ์ฐ B๋ A์ ๋ํ ์ ๋ณด ์ ๋ฌธ๊ฐ๋ค)
CREATOR ํจํด์ ์๋๋ ์ด๋ค ๋ฐฉ์์ผ๋ก๋ ์์ฑ๋๋ ๊ฐ์ฒด์ ์ฐ๊ฒฐ๋๊ฑฐ๋ ๊ด๋ จ๋ ํ์๊ฐ ์๋ ๊ฐ์ฒด์ ํด๋น ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ฑ ์์ ๋งก๊ธฐ๋ ๊ฒ์ด๋ค. ์์ฑ๋ ๊ฐ์ฒด์ ๋ํด ์ ์๊ณ ์์ด์ผ ํ๊ฑฐ๋ ๊ทธ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ๊ฐ์ฒด๋ ์ด๋ค ๋ฐฉ์์ด๋ก๋ ์์ฑ๋ ๊ฐ์ฒด์ ์ฐ๊ฒฐ๋ ๊ฒ์ด๋ค. ๋ค์ ๋งํด์ ๋ ๊ฐ์ฒด๋ ์๋ก ๊ฒฐํฉ๋๋ค.
์ด๋ฏธ ๊ฒฐํฉ๋ผ ์๋ ๊ฐ์ฒด์๊ฒ ์์ฑ ์ฑ ์์ ํ ๋นํ๋ ๊ฒ์ ์ค๊ณ์ ์ ์ฒด์ ์ธ ๊ฒฐํฉ๋์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก CREATOR ํจํด์ ์ด๋ฏธ ์กด์ฌํ๋ ๊ฐ์ฒด ์ฌ์ด์ ๊ด๊ณ๋ฅผ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ ์ค๊ณ๊ฐ ๋ฎ์ ๊ฒฐํฉ๋๋ฅผ ์ ์งํ ์ ์๊ฒ ํ๋ค.
๊ธฐ์กด์ ์ค๊ณ๊ฐ ์ด์ ์๋์ง ํ์ธํ๋ ๋ฐฉ๋ฒ์, ๋ณ๊ฒฝ์ ์ด์ ๊ฐ ํ๋ ์ด์์ธ ํด๋์ค๋ฅผ ์ฐพ๋ ๊ฒ์ผ๋ก๋ถํฐ ์์ํ๋ ๊ฒ์ด ์ข๋ค.
์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ์ธ์คํด์ค ๋ณ์๊ฐ ์ด๊ธฐํ๋๋ ์์ ์ ์ดํด๋ณด๋ ๊ฒ์ด๋ค. ์์ง๋๊ฐ ๋์ ํด๋์ค๋ ์ธ์คํด์ค๋ฅผ ์์ฑํ ๋ ๋ชจ๋ ์์ฑ์ ํจ๊ป ์ด๊ธฐํํ๋ค. ๋ฐ๋ฉด ์์ง๋๊ฐ ๋ฎ์ ํด๋์ค๋ ๊ฐ์ฒด์ ์์ฑ ์ค ์ผ๋ถ๋ง ์ด๊ธฐํํ๊ณ ์ผ๋ถ๋ ์ด๊ธฐํ๋์ง ์๋ ์ํ๋ก ๋จ๊ฒจ์ง๋ค.
๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ๋ฉ์๋๋ค์ด ์ธ์คํด์ค ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ ์ดํด๋ณด๋ ๊ฒ์ด๋ค. ๋ชจ๋ ๋ฉ์๋๊ฐ ๊ฐ์ฒด์ ๋ชจ๋ ์์ฑ์ ์ฌ์ฉํ๋ค๋ฉด ํด๋์ค์ ์์ง๋๋ ๋๋ค๊ณ ๋ณผ ์ ์๋ค. ๋ฐ๋ฉด ๋ฉ์๋๋ค์ด ์ฌ์ฉํ๋ ์์ฑ์ ๋ฐ๋ผ ๊ทธ๋ฃน์ด ๋๋๋ค๋ฉด ํด๋์ค์ ์์ง๋๊ฐ ๋ฎ๋ค๊ณ ๋ณผ ์ ์๋ค.
ํด๋์ค๊ฐ ๋ค์๊ณผ ๊ฐ์ ์งํ๋ก ๋ชธ์ด์ ์๊ณ ์๋ค๋ฉด ํด๋์ค์ ์์ง๋๊ฐ ๋ฎ์ ๊ฒ์ด๋ค.
- ํด๋์ค๊ฐ ํ๋ ์ด์์ ์ด์ ๋ก ๋ณ๊ฒฝ๋ผ์ผ ํ๋ค๋ฉด ์์ง๋๊ฐ ๋ฎ์ ๊ฒ์ด๋ค. ๋ณ๊ฒฝ์ ์ด์ ๋ฅผ ๊ธฐ์ค์ผ๋ก ํด๋์ค๋ฅผ ๋ถ๋ฆฌํ๋ผ.
- ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ด๊ธฐํํ๋ ์์ ์ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์๋ก ๋ค๋ฅธ ์์ฑ๋ค์ ์ด๊ธฐํํ๊ณ ์๋ค๋ฉด ์์ง๋๊ฐ ๋ฎ์ ๊ฒ์ด๋ค. ์ด๊ธฐํ๋๋ ์์ฑ์ ๊ทธ๋ฃน์ ๊ธฐ์ค์ผ๋ก ํด๋์ค๋ฅผ ๋ถ๋ฆฌํ๋ผ.
- ๋ฉ์๋ ๊ทธ๋ฃน์ด ์์ฑ ๊ทธ๋ฃน์ ์ฌ์ฉํ๋์ง ์ฌ๋ถ๋ก ๋๋๋ค๋ฉด ์์ง๋๊ฐ ๋ฎ์ ๊ฒ์ด๋ค. ์ด๋ค ๊ทธ๋ฃน์ ๊ธฐ์ค์ผ๋ก ํด๋์ค๋ฅผ ๋ถ๋ฆฌํ๋ผ.
์ข์ ์ธํฐํ์ด์ค๋ ์ต์ํ์ ์ธํฐํ์ด์ค์ ์ถ์์ ์ธ ์ธํฐํ์ด์ค๋ผ๋ ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ํ๋ค. ์ต์ํ์ ์ธํฐํ์ด์ค๋ ๊ผญ ํ์ํ ์คํผ๋ ์ด์ ๋ง์ ์ธํฐํ์ด์ค์ ํฌํจํ๋ค. ์ถ์์ ์ธ ์ธํฐํ์ด์ค๋ ์ด๋ป๊ฒ ์ํํ๋์ง ์๋๋ผ ๋ฌด์์ ํ๋์ง ํํํ๋ค.
๋ค์์ ํผ๋ธ๋ฆญ ์ธํฐํ์ด์ค์ ํ์ง์ ์ํฅ์ ๋ฏธ์น๋ ์์น๊ณผ ๊ธฐ๋ฒ์ด๋ค.
- ๋๋ฏธํฐ ๋ฒ์น
- ๋ฌป์ง ๋ง๊ณ ์์ผ๋ผ
- ์๋๋ฅผ ๋๋ฌ๋ด๋ ์ธํฐํ์ด์ค
- ๋ช ๋ น-์ฟผ๋ฆฌ ๋ถ๋ฆฌ
๋๋ฏธํฐ ๋ฒ์น์ ์ ์๋ ค์ง ๋ฐ๊ฒฌ๋ฒ์ผ๋ก ๋ชจ๋์ ์์ ์ด ์กฐ์ํ๋ ๊ฐ์ฒด์ ์์ฌ์ ์ ๋ชฐ๋ผ์ผ ํ๋ค๋ ๋ฒ์น์ด๋ค. ๊ฐ์ฒด๋ ์๋ฃ๋ฅผ ์จ๊ธฐ๊ณ ํจ์๋ฅผ ๊ณต๊ฐํ๋ค. ์ฆ ๊ฐ์ฒด๋ ์กฐํ ํจ์๋ก ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๊ณต๊ฐํ๋ฉด ์๋๋ค๋ ์๋ฏธ๋ค. ๊ทธ๋ฌ๋ฉด ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋ ธ์ถํ๋ ์ ์ด๋๊น, ์ ํํ ํํํ์๋ฉด, ๋๋ฏธํฐ ๋ฒ์น์ "ํด๋์ค C์ ๋ฉ์๋ f๋ ๋ค์ ๊ฐ์ฒด์ ๋ฉ์๋๋ง ํธ์ถํด์ผ ํ๋ค"๊ณ ์ฃผ์ฅํ๋ค
- ํด๋์ค C
- f๊ฐ ์์ฑํ ๊ฐ์ฒด
- f ์ธ์๋ก ๋์ด์จ ๊ฐ์ฒด
- C ์ธ์คํด์ค ๋ณ์์ ์ ์ฅ๋ ๊ฐ์ฒด
๊ทธ๋ฆฌ๊ณ ์ค์ง ํ๋์ ๋ํธ๋ง ์ฌ์ฉํด์ผ ํ๋ค.
๋ค์์ ๋๋ฏธํฐ์ ๋ฒ์น์ ์๋ฐํ๋ ์ ํ์ ์ธ ์ฝ๋์ด๋ค.
screening.getMovie().getDiscountConditions();๊ฐ๋์์ ๋ฌป๋ ๊ฒ ์ธ์๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ๋ ์๋ค. ์ปฌ๋ ์ ์ ํฌํจ๋ ๊ฐ์ฒด๋ค์ ์ฒ๋ฆฌํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ๊ฐ์ฒด์๊ฒ ๋ฌผ์ด๋ณด๋ ๊ฒ์ด๋ค. ๋ค์ ์ฝ๋์์ Moive์๊ฒ ๋ฌป์ง ์๊ณ ๋ movies ์ปฌ๋ ์ ์ ํฌํจ๋ ์ ์ฒด ์ํ์ ๊ฐ๊ฒฉ์ ๊ณ์ฐํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์๊น?
for(Movie each : movies) {
total += each.getFee();
}๋ฌผ์ผ๋ ค๋ ๊ฐ์ฒด๊ฐ ์ ๋ง๋ก ๋ฐ์ดํฐ์ธ ๊ฒฝ์ฐ๊ฐ ์๋ค. ๋ก๋ฒํผ ๋งํด์ ํด๋ฆฐ์ฝ๋์์ ๋๋ฏธํฐ ๋ฒ์น์ ์๋ฐ ์ฌ๋ถ๋ ๋ฌป๋ ๋์์ด ๊ฐ์ฒด์ธ์ง, ์๋ฃ ๊ตฌ์กฐ์ธ์ง์ ๋ฌ๋ ค์๋ค๊ณ ์ค๋ช ํ๋ค. ๊ฐ์ฒด๋ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ์จ๊ฒจ์ผ ํ๋ฏ๋ก ๋๋ฏธํฐ ๋ฒ์น์ ๋ฐ๋ฅด๋ค๋ ๊ฒ์ด ์ข์ง๋ง ์๋ฃ๊ตฌ์กฐ๋ผ๋ฉด ๋น์ฐํ ๋ด๋ถ๋ฅผ ๋ ธ์ถํด์ผ ํ๋ฏ๋ก ๋๋ฏธํฐ ๋ฒ์น์ ์ ์ฉํ ํ์๊ฐ ์๋ค.
๊ฐ์ฒด์๊ฒ ์ํค๋ ๊ฒ์ด ํญ์ ๊ฐ๋ฅํ ๊ฒ์ ์๋๋ค. ๊ฐ๋์ฉ์ ๋ฌผ์ด์ผ ํ๋ค. ์ฌ๊ธฐ์ ๊ฐ์กฐํ๊ณ ์ถ์ ๊ฒ์ ์ํํธ์จ์ด ์ค๊ณ์ ๋ฒ์น์ด๋ ์กด์ฌํ์ง ์๋๋ค๋ ๊ฒ์ด๋ค. ์์น์ ๋งน์ ํ์ง ๋ง๋ผ. ์์น์ด ์ ์ ํ ์ํฉ๊ณผ ๋ถ์ ์ ํ ์ํ์ ํ๋จํ ์ ์๋ ์๋ชฉ์ ๊ธธ๋ฌ๋ผ. ์ค๊ณ๋ ํธ๋ ์ด๋์คํ์ ์ฐ๋ฌผ์ด๋ค. ์ํํธ์จ์ด ์ค๊ณ์ ์กด์ฌํ๋ ๋ช ์ ์๋๋ ๋ฒ์น ์ค ํ๋๋ "๊ฒฝ์ฐ์ ๋ฐ๋ผ ๋ค๋ฅด๋ค"๋ผ๋ ์ฌ์ค์ ๋ช ์ฌํ์.
ํ๋ ฅ์ด๋ผ๋ ์ปจํ ์คํธ ์์์ ๊ฐ์ฒด๋ณด๋ค ๋ฉ์์ง๋ฅผ ๋จผ์ ๊ฒฐ์ ํ๋ฉด ๋ ๊ฐ์ฒด ์ฌ์ด์ ๊ตฌ์กฐ์ ์ธ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ ์ ์๋ค. ์์ ํ ๊ฐ์ฒด๋ฅผ ์์ง ๋ชปํ ์ํ์์ ๋ฉ์์ง๋ฅผ ๋จผ์ ์ ํํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด์ ๋ด๋ถ ๊ตฌ์กฐ์ ๋ํด ๊ณ ๋ฏผํ ํ์๊ฐ ์์ด์ง ๋ค.๋ฐ๋ผ์ ๋ฉ์์ง๊ฐ ๊ฐ์ฒด๋ฅผ ์ ํํ๊ฒํจ์ผ๋ก์จ ์๋์ ์ผ๋ก ๋๋ฏธํฐ๋ฒ์น์ ์๋ฐํ ์ํ์ ์ต์ํํ ์์๋ค.
๋ฌป์ง ๋ง๊ณ ์์ผ๋ผ ์์น๊ณผ ๋๋ฏธํฐ ๋ฒ์น์ ํ๋ฅญํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ํฌํจํด์ผ ํ๋ ์คํผ๋ ์ด์ ์ ๋ํ ํํธ๋ฅผ ์ ๊ณตํ๋ค. ๋ด๋ถ์ ์ํ๋ฅผ ๋ฌป๋ ์คํผ๋ ์ด์ ์ ์ธํฐํ์ด์ค์ ํฌํจ์ํค๊ณ ์๋ค๋ฉด ๋ ๋์ ๋ฐฉ๋ฒ์ ์๋์ง ๊ณ ๋ฏผํด ๋ณด๋ผ. ๋ด๋ถ์ ์ํ๋ฅผ ์ด์ฉํด ์ด๋ค ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ๋ก์ง์ด ๊ฐ์ฒด ์ธ๋ถ์ ์กด์ฌํ๋๊ฐ? ๊ทธ๋ ๋ค๋ฉด ํด๋น ๊ฐ์ฒด๊ฐ ์ฑ ์์ ธ์ผ ํ๋ ์ด๋ค ํ๋์ด ๊ฐ์ฒด ์ธ๋ถ๋ก ๋์๋ ๊ฒ์ด๋ค.
์ํ๋ฅผ ๋ฌป๋ ์คํผ๋ ์ด์ ์ ํ๋์ ์์ฒญํ๋ ์คํผ๋ ์ด์ ์ผ๋ก ๋์ฒดํจ์ผ๋ก์จ ์ธํฐํ์ด์ค๋ฅผ ํฅ์์์ผ๋ผ. ํ๋ ฅ์ ์ค๊ณํ๊ณ ๊ฐ์ฒด๊ฐ ์์ ํ ๋ฉ์์ง๋ฅผ ๊ฒฐ์ ํ๋ ๋งค ์๊ฐ ๋ฌป์ง ๋ง๊ณ ์์ผ๋ผ ์์น๊ณผ ๋๋ฏธํฐ ๋ฒ์น์ ๋จธ๋ฆฟ์์ ๋ ์ฌ๋ฆฌ๋ ๊ฒ์ ํผ๋ธ๋ฆญ ์ธํฐํ์ด์ค์ ํ์ง์ ํฅ์์ํฌ ์ ์๋ ์ข์ ์ต๊ด์ด๋ค.
public boolean getAdmin(); // ์ด๊ฒ ๋ณด๋จ
public boolean isAdmin(); // ์ด๋ ๊ฒ..ํ์ง๋ง ๋จ์ํ๊ฒ ๊ฐ์ฒด์๊ฒ ๋ฌป์ง ์๊ณ ์ํจ๋ค๊ณ ํด์ ๋ชจ๋ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๋ ๊ฒ์ ์๋๋ค. ํ๋ฅญํ ์ธํฐํ์ด์ค๋ฅผ ์ํํ๊ธฐ ์ํด์๋ ๊ฐ์ฒด๊ฐ ์ด๋ป๊ฒ ์์ ์ ์ํํ๋์ง๋ฅผ ๋ ธ์ถํด์๋ ์ ๋๋ค. ์ธํฐํ์ด์ค๋ ๊ฐ์ฒด๊ฐ ์ด๋ป๊ฒ ํ๋์ง๊ฐ ์๋๋ผ ๋ฌด์์ ํ๋์ง๋ฅผ ์์ ํด์ผ ํ๋ค.
๋ฉ์์ง๋ฅผ ๋จผ์ ์ ํํ๋ฉด ๋ฌป์ง ๋ง๊ณ ์์ผ๋ผ ์คํ์ผ์ ๋ฐ๋ผ ํ๋ ฅ์ ๊ตฌ์กฐํํ๊ฒ ๋๋ค. ํด๋ผ์ด์ธํธ์ ๊ด์ ์์ ๋ฉ์์ง๋ฅผ ์ ํํ๊ธฐ ๋๋ฌธ์ ํ์ํ์ ๋ณด๋ฅผ ๋ฌผ์ ํ์ ์์ด ์ํ๋ ๊ฒ์ ํํํ ๋ฉ์์ง๋ฅผ ์ ์กํ๋ฉด ๋๋ค.
์ผํธ ๋ฒก์ด ๋ฉ์๋๋ฅผ ๋ช ๋ช ํ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ค๋ช ํ๋ค. ์ฒซ๋ฒ ์งธ ๋ฐฉ๋ฒ์ ๋ฉ์๋๊ฐ ์์ ์ ์ด๋ป๊ฒ ์ํํ๋์ง๋ฅผ ๋ํ๋ด๋๋ก ์ด๋ฆ ์ง๋ ๊ฒ์ด๋ค. ์ด ๊ฒฝ์ฐ ๋ฉ์๋์ ์ด๋ฆ์ ๋ด๋ถ์ ๊ตฌํ ๋ฐฉ๋ฒ์ ๋๋ฌ๋ธ๋ค. ๋ค์์ ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ PeriodCondition๊ณผ SequenceCondition์ ๋ฉ์๋๋ฅผ ๋ช ๋ช ํ ๊ฒ์ด๋ค.
public class PeriodCondition {
public boolean isSatisfiedByPeriod(Screening screening) {...}
}
public class SequenceCondition {
public boolean isSatisfiedBySequence(Screening screening) {...}
}์ด๋ฐ ์คํ์ผ์ ์ข์ง ์๋๋ฐ ๊ทธ ์ด์ ๋ฅผ ๋ ๊ฐ์ง๋ก ์์ฝํ ์ ์๋ค.
- ๋ฉ์๋์ ๋ํด ์ ๋๋ก ์ปค๋ฎค๋์ผ์ด์ ํ์ง ๋ชปํ๋ค. ํด๋ผ์ด์ธํธ์ ๊ด์ ์์ isSatisfiedByPeriod์ isSatisfiedBySequence ๋ชจ๋ ํ ์ธ ์กฐ๊ฑด์ ํ๋จํ๋ ๋์ผํ ์์ ์ ์ํํ๋ค. ํ์ง๋ง ๋ฉ์๋์ ์ด๋ฆ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋ ๋ฉ์๋์ ๋ด๋ถ ๊ตฌํ์ ์ ํํ๊ฒ ์ดํดํ์ง ๋ชปํ๋ค๋ฉด ๋ ๋ฉ์๋๊ฐ ๋์ผํ ์์ ์ ์ํํ๋ค๋ ์ฌ์ค์ ์์์ฑ๊ธฐ ์ด๋ ต๋ค.
- ๋ ํฐ ๋ฌธ์ ๋ ๋ฉ์๋ ์์ค์์ ์บก์ํ๋ฅผ ์๋ฐํ๋ค๋ ๊ฒ์ด๋ค. ์ด ๋ฉ์๋๋ค์ ํด๋ผ์ด์ธํธ๋ก ํ์ฌ๊ธ ํ๋ ฅํ๋ ๊ฐ์ฒด์ ์ข ๋ฅ๋ฅผ ์๋๋ก ๊ฐ์ํ๋ค. PeriodCondition์ ์ฌ์ฉํ๋ ์ฝ๋๋ฅผ SequenceCondition์ ์ฌ์ฉํ๋๋ก ๋จ์ํ ์ฐธ์กฐํ๋ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ๋ฟ๋ง ์๋๋ผ ํธ์ถํ๋ ๋ฉ์๋๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ค. ๋ง์ฝ ํ ์ธ ์ฌ๋ถ๋ฅผ ํ๋จํ๋ ๋ฐฉ๋ฒ์ด ๋ณ๊ฒฝ๋๋ค๋ฉด ๋ฉ์๋์ ์ด๋ฆ ์ญ์ ๋ณ๊ฒฝํด์ผ ํ ๊ฒ์ด๋ค. ๋ฉ์๋ ์ด๋ฆ์ ๋ณ๊ฒฝํ๋ค๋ ๊ฒ์ ๋ฉ์์ง๋ฅผ ์ ์กํ๋ ํด๋ผ์ด์ธํธ์ ์ฝ๋๋ ํจ๊ป ๋ณ๊ฒฝํด์ผ ํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ๋ฐ๋ผ์ ์ฑ ์์ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋๋ฌ๋ด๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ค๊ณ๋ ๋ณ๊ฒฝ์ ์ทจ์ฝํ ์ ๋ฐ์ ์๋ค.
๋ฉ์์ง๋ฅผ ๋จผ์ ์ ํํ๋ค๋ ๊ฒ์ ๋ฉ์์ง๋ฅผ ์ ์กํ๋ ํด๋ผ์ด์ธํธ์ ๊ด์ ์์ ๋ฉ์์ง์ ์ด๋ฆ์ ์ ํ๋ค๋ ๊ฒ์ด๋ค.๋น์ฐํ ๊ทธ ์ด๋ฆ์๋ ํด๋ผ์ด์ธํธ๊ฐ ๋ฌด์์ ์ํ๋์ง,๊ทธ ์๋๊ฐ ๋ถ๋ช ํ๊ฒ ๋๋ฌ๋ ์๋ฐ์ ์๋ค.
๋ช ๋ น-์ฟผ๋ฆฌ ๋ถ๋ฆฌ ์์น์ ํผ๋ธ๋ฆญ ์ธํฐํ์ด์ค์ ์คํผ๋ ์ด์ ์ ์ ์ํ ๋ ์ฐธ๊ณ ํ ์ ์๋ ์ง์นจ์ ์ ๊ณตํ๋ค.
๋ช ๋ น-์ฟผ๋ฆฌ ๋ถ๋ฆฌ ์์น์ ์์ง๋ ์คํผ๋ ์ด์ ์ ๋ถ์ํจ๊ณผ๋ฅผ ๋ฐ์์ํค๋ ๋ช ๋ น์ด๊ฑฐ๋ ๋ถ์ํจ๊ณผ๋ฅผ ๋ฐ์์ํค์ง ์๋ ์ฟผ๋ฆฌ์ค ํ๋์ฌ์ผ ํ๋ค๋ ๊ฒ์ด๋ค. ์ด๋ค ์คํผ๋ ์ด์ ๋ ๋ช ๋ น์ธ ๋์์ ์ฟผ๋ฆฌ์ฌ์๋ ์ ๋๋ค. ๋ฐ๋ผ์ ๋ช ๋ น๊ณผ ์ฟผ๋ฆฌ๋ฅผ ๋ถ๋ฆฌํ๊ธฐ ์ํด์๋ ๋ค์์ ๋ ๊ฐ์ง ๊ท์น์ ์ค์ํด์ผ ํ๋ค.
- ๊ฐ์ฒด์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ช ๋ น์ ๋ฐํ๊ฐ์ ๊ฐ์ง ์ ์๋ค.
- ๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ๋ฐํํ๋ ์ฟผ๋ฆฌ๋ ์ํ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
๋ช ๋ น-์ฟผ๋ฆฌ ๋ถ๋ฆฌ ์์น์ ํ ๋ฌธ์ฅ์ผ๋ก ํํํ๋ฉด "์ง๋ฌธ์ด ๋ต๋ณ์ ์์ ํด์๋ ์ ๋๋ค"๋ ๊ฒ์ด๋ค.๋ช ๋ น์ ์ํ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ง๋ง ์ํ๋ฅผ ๋ฐํํด์๋ ์ ๋๋ค. ์ฟผ๋ฆฌ๋ ๊ฐ์ฒด์ ์ํ๋ฅผ ๋ฐํํ ์ ์์ง๋ง ์ํ๋ฅผ ๋ณ๊ฒฝํด์๋ ์ ๋๋ค.
๋ถ์ํจ๊ณผ๋ฅผ ๋ฐ์์ํค์ง ์๋ ๊ฒ๋ง์ ํจ์๋ก ์ ํํจ์ผ๋ก์จ ์ํํธ์จ์ด์์ ๋งํ๋ 'ํจ์'์ ๊ฐ๋ ์ด ์ผ๋ฐ ์ํ์์์ ๊ฐ๋ ๊ณผ ์์ถฉ๋์ง ์๊ฒ ํ๋ค. ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ์ง๋ง ์ง์ ์ ์ผ๋ก ๊ฐ์ ๋ฐํํ์ง ์๋ ๋ช ๋ น(Command)๊ณผ ๊ฐ์ฒด์ ๋ํ ์ ๋ณด๋ฅผ ๋ฐํํ์ง๋ง ๋ณ๊ฒฝํ์ง ์๋ ์ฟผ๋ฆฌ(Query)๊ฐ์ ๋ช ํํ ๊ตฌ๋ถ์ ์ ์งํ ๊ฒ์ด๋ค.
๋ช ๋ น-์ฟผ๋ฆฌ ๋ถ๋ฆฌ ์์น์ ์ ์งํค๋ฉด ์์ธก์ด ๊ฐ๋ฅํ๊ณ ์ดํดํ๊ธฐ ์ฌ์ฐ๋ฉฐ ๋๋ฒ๊น ์ด ์ฉ์ดํ ๋์์ ์ ์ง๋ณด์๊ฐ ์์ํด์ง ๊ฒ์ด๋ค.
๋ฉ์์ง๋ฅผ ๋จผ์ ์ ํํ๋ค๋ ๊ฒ์ ํ๋ ฅ์ด๋ผ๋ ๋ฌธ๋งฅ ์์์ ๊ฐ์ฒด์ ์ธํฐํ์ด์ค์ ๊ดํด ๊ณ ๋ฏผํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ๊ฐ์ฒด๊ฐ ๋จ์ํ ์ด๋ค ์ผ์ ํด์ผ ํ๋์ง๋ฟ๋ง ์๋๋ผ ํ๋ ฅ ์์์ ๊ฐ์ฒด์ ์ํ๋ฅผ ์์ธกํ๊ณ ์ดํดํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ๊ดํด ๊ณ ๋ฏผํ๊ฒ ๋๋ค.๋ฐ๋ผ์ ์์ธก๊ฐ๋ฅํ ํ๋ ฅ์๋ง๋ค๊ธฐ ์ํด ๋ช ๋ น๊ณผ์ฟผ๋ฆฌ๋ฅผ ๋ถ๋ฆฌํ๊ฒ ๋ ๊ฒ์ด๋ค.
(๊ทธ๋ฆผ 1) ์ธํฐํ์ด์ค๊ฐ ์๋ฒ ๋ชจ๋ ์ชฝ์ ์์นํ๋ ์ ํต์ ์ธ ๋ชจ๋ ๊ตฌ์กฐ
(๊ทธ๋ฆผ 2) ์ธํฐํ์ด์ค์ ์์ ๊ถ์ ์ญ์ ์ํจ ๊ฐ์ฒด์งํฅ์ ์ธ ๋ชจ๋ ๊ตฌ์กฐ
์์กด์ฑ ์ญ์ ์์น์ ๋ฐ๋ผ ์์ ์์ค์ ํ๋ ฅ ํ๋ฆ์ ์ฌ์์ฉํ๊ธฐ ์ํด์๋ ์ถ์ํ๊ฐ ์ ๊ณตํ๋ ์ธํฐํ์ด์ค์ ์์ ๊ถ ์ญ์ ์ญ์ ์์ผ์ผ ํ๋ค. ์ ํต์ ์ธ ์ค๊ณ ํจ๋ฌ๋ค์์ ๊ทธ๋ฆผ1 ์ ๊ฐ์ด ์ธํฐํ์ด์ค์ ์์ ๊ถ์ ํด๋ผ์ด์ธํธ ๋ชจ๋์ด ์๋ ์๋ฒ ๋ชจ๋์ ์์น์ํค๋ ๋ฐ๋ฉด ์ ์ค๊ณ๋ ๊ฐ์ฒด์งํฅ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ๊ทธ๋ฆผ 2 ๊ณผ ๊ฐ์ด ์ธํฐํ์ด์ค์ ์์ ๊ถ์ ์๋ฒ๊ฐ ์๋ ํด๋ผ์ด์ธํธ์ ์์น์ํจ๋ค. ๊ฐ์ฒด์งํฅ ํ๋ ์์ํฌ์ ๋ชจ๋ ๊ตฌ์กฐ๋ฅผ ์ค๊ณํ๋ ๋ฐ ๊ฐ์ฅ ์ค์ํ ํต์ฌ ์์น์ด๋ค.
์ฝ๋ ์ฌ์ฌ์ฉ์ ๋ชฉ์ ์ผ๋ก ์์์ ์ฌ์ฉํ๋ฉด ๋ณ๊ฒฝํ๊ธฐ ์ด๋ ต๊ณ ์ ์ฐํ์ง ๋ชปํ ์ค๊ณ์ ์ด๋ฅผ ํ๋ฅ ์ด ๋์์ง๋ค. ์ฑ์์ ๋ชฉ์ ์ ์ฝ๋ ์ฌ์ฌ์ฉ์ด ์๋๋ค. ์ฑ์์ ํ์ ๊ณ์ธต์ ๊ตฌ์กฐํํ๊ธฐ ์ํด ์ฌ์ฉํด์ผ ํ๋ค. ํ์ ๊ณ์ธต์ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ค์ํ ํน์ฑ ์ค ํ๋์ธ ๋คํ์ฑ์ ๊ธฐ๋ฐ์ ์ ๊ณตํ๋ค.
์์์ ์ด์ฉํด ์์ ํด๋์ค๋ฅผ ์ถ๊ฐํ๋ ค ํ๋ค๋ฉด ์ค์ค๋ก์๊ฒ ๋์๊ณผ ๊ฐ์ ์ง๋ฌธ์ ํด๋ณด๊ธฐ ๋ฐ๋๋ค. ์ฑ์์ ์ฌ์ฉํ๋ ค๋ ๋ชฉ์ ์ด ๋จ์ํ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ๊ธฐ ์ํด์์ธ๊ฐ? ์๋๋ฉด ํด๋ผ์ด์ธํธ ๊ด์ ์์ ์ธ์คํด์ค๋ค์ ๋์ผํ๊ฒ ํ๋ํ๋ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ๊ธฐ ์ํด์์ธ๊ธฐ? ์ฒซ ๋ฒ์งธ ์ง๋ฌธ์ ๋ํ ๋ต์ด โ์'๋ผ๋ฉด ์ฑ์์ ์ฌ์ฉํ์ง ๋ง ์ด์ผ ํ๋ค.
์ฌ๋๋ค์ ์์์ ์ฌ์ฉํ๋ ๋ ๊ฐ์ง ๋ชฉ์ ์ ํน๋ณํ ์ด๋ฆ์ ๋ถ์๋๋ฐ ์๋ธํด๋์ฑ๊ณผ ์๋ธํ์ดํ์ด ๊ทธ๊ฒ์ด๋ค.
- ์๋ธํด๋์ฑ(subclassing) : ๋ค๋ฅธ ํด๋์ค์ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ ๋ชฉ์ ์ผ๋ก ์์ํ๋ ๊ฒฝ์ฐ๋ฅผ ๋งํ๋ค. ์์ ํด๋์ค์ ๋ถ๋ชจ ํด๋์ค์ ํ๋์ด ํธํ๋์ง ์๊ธฐ ๋๋ฌธ์ ์์ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ๋ถ๋ชจ ์ธ์คํด์ค๋ฅผ ๋์ฒดํ ์ ์๋ค. ์๋ธํด๋์ฑ์ ๊ตฌํ ์์ ๋๋ ํด๋์ค ์์ ์ด๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํ๋ค.
- ์๋ธํ์ดํ(subtyping) : ํ์ ๊ณ์ธต์ ๊ตฌ์ฑํ๊ธฐ ์ํด ์์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ฅผ ๊ฐ๋ฆฌํจ๋ค. ์๋ธํ์ดํ์์๋ ์์ ํด๋์ค์ ๋ถ๋ชจ ํด๋์ค์ ํ๋์ด ํธํ๋๊ธฐ ๋๋ฌธ์ ์์ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ๋ถ๋ชจ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๋์ฒดํ ์ ์๋ค. ์ด๋ ๋ถ๋ชจ ํด๋์ค๋ ์์ ํด๋์ค์ ์ํผํ์ ์ด ๋๊ณ ์์ ํด๋์ค๋ ๋ถ๋ชจ ํด๋์ค์ ์๋ธํ์ ์ด ๋๋ค. ์๋ธํ์ดํ์ ์ธํฐํ์ด์ค ์์ ์ด๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํ๋ค.
์์ ํด๋์ค๊ฐ ๋ถ๋ชจ ํด๋์ค์ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ ๋ชฉ์ ์ด๋ผ๋ฉด ์๋ธ ํด๋์ฑ, ๋ถ๋ชจ ํด๋์ค์ ์ธ์คํด์ค ๋์ ์์ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ ๋ชฉ์ ์ผ๋ก ์์ํ๋ค๋ฉด ์๋ธ ํ์ดํ
์๋ธํด๋์ฑ๊ณผ ์๋ธํ์ดํ์ ๋๋๋ ๊ธฐ์ค์ ์์์ ์ฌ์ฉํ๋ ๋ชฉ์ ์ด๋ค.
is-a ๊ด๊ณ๋ก ํํ๋ ๋ฌธ์ฅ์ ๋ณผ ๋๋ง๋ค ๋ฌธ์ฅ ์์ "ํด๋ผ์ด์ธํธ ์ ์ฅ์์" ๋ผ๋ ๋ง์ด ๋น ์ ธ ์๋ค๊ณ ์๊ฐํ๋ผ. (ํด๋ผ์ด์ธํธ ์ ์ฅ์์) ์ ์ฌ๊ฐํ์ ์ง์ฌ๊ฐํ์ด๋ค. (ํด๋ผ์ด์ธํธ ์ ์ฅ์์) ํญํธ์ ์๋ค. ํด๋ผ์ด์ธํธ๋ฅผ ๋ฐฐ์ ํ is-a ๊ด๊ณ๋ ํผ๋์ผ๋ก ๋ชฐ์๊ฐ ๊ฐ๋ฅ์ฑ์ด ๋๋ค.
is-a ๊ด๊ณ๋ ๊ฐ์ฒด์งํฅ์์ ์ค์ํ๊ฒ์ ๊ฐ์ฒด์ ์์ฑ์ด ์๋๋ผ ๊ฐ์ฒด์ ํ๋์ด๋ผ๋ ์ ์ ๊ฐ์กฐํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ํด๋ผ์ด์ธํธ๋ฅผ ๊ณ ๋ คํ์ง ์์ ์ฑ ๊ฐ๋ ๊ณผ ์์ฑ์ ์ธก๋ฉด์์ ์์ ๊ด๊ณ๋ฅผ ์ ํ ๊ฒฝ์ฐ ๋ฆฌ์ค์ฝํ ์นํ ์์น์ ์๋ฐํ๋ ์๋ธํด๋์ฑ์ ์ด๋ฅด๊ฒ ๋ ํ๋ฅ ์ด ๋๋ค.
์ํผํ์ ๊ณผ ์๋ธํ์ ์ด ํด๋ผ์ด์ธํธ ์ ์ฅ์์ ํ๋์ด ํธํ๋๋ค๋ฉด ๋ ํ์ ์ is-a๋ก ์ฐ๊ฒฐํด ๋ฌธ์ฅ์ ๋ง๋ค์ด๋ ์ด์ํ์ง ์์ ๋จ์ด๋ก ํ์ ์ ์ด๋ฆ์ ์ ํ๋ผ๋ ๊ฒ์ด๋ค. ํ๋์ ๊ณ ๋ คํ์ง ์์ ๋ ํ์ ์ ์ด๋ฆ์ด ๋จ์ํ is-a๋ก ์ฐ๊ฒฐ ๊ฐ๋ฅํ๋ค๊ณ ํด์ ์์ ๊ด๊ณ๋ก ์ฐ๊ฒฐํ์ง ๋ง๋ผ. ์ด๋ฆ์ด ์๋๋ผ ํ๋์ด ๋จผ์ ๋ค. ๊ฐ์ฒด์งํฅ๊ณผ ๊ด๋ จ๋ ๋๋ถ๋ถ์ ๊ท์น์ด ๊ทธ๋ฐ ๊ฒ ์ฒ๋ผ is-a ๊ด๊ณ ์ญ์ ํ๋์ด ์ฐ์ ์ด๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก ์์์ด ์๋ธํ์ดํ์ ์ํด ์ฌ์ฉ๋ ๊ฒฝ์ฐ์๋ง is-a ๊ด๊ณ๋ค. ์๋ธํด๋์ฑ์ ๊ตฌํํ๊ธฐ ์ํด ์์์ ํ๋ค๋ฉด is-a ๊ด๊ณ๋ผ๊ณ ๋งํ ์ ์๋ค.
(์ถํ ๊ธ๋ก ์ค๋ช )
์์ ์ด ์์ ํ ๋ฉ์ธ์ง๋ฅผ ๋ค๋ฅธ ๊ฐ์ฒด์๊ฒ ๋์ผํ๊ฒ ์ ๋ฌํด์ ์ฒ๋ฆฌ๋ฅผ ์์ฒญ ํ๋ ๊ฒ์ **์์(delegation)**์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์์์ ๋ณธ์ง์ ์ผ๋ก ์์ ์ด ์ ์ํ๊ฑฐ๋ ์ฒ๋ฆฌํ ์ ์๋ ์์ฑ ๋๋ ๋ฉ์๋์ ํ์ ๊ณผ์ ์ ๋ค๋ฅธ ๊ฐ์ฒด๋ก ์ด๋์ํค๊ธฐ ์ํด ์ฌ์ฉํ๋ค. ์ด๋ฅผ ์ํด ์์์ ํญ์ ํ์ฌ์ ์คํ ๋ฌธ๋งฅ์ ๊ฐ๋ฆฌํค๋ self ์ฐธ์กฐ๋ฅผ ์ธ์๋ก ์ ๋ฌํ๋ค. ๋ฐ๋ก ์ด๊ฒ์ด self ์ฐธ์กฐ๋ฅผ ์ ๋ฌํ์ง ์๋ ํฌ์๋ฉ๊ณผ ์์์ ์ฐจ์ด์ ์ด๋ค.
๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์๊ฒ ์์ฒญ์ ์ฒ๋ฆฌํ ๋ ์ธ์๋ก self๋ฅผ ์ ๋ฌํ์ง ์์ ์๋ ์๋ค. ์ด๊ฒ์ ์์ฒญ์ ์ ๋ฌ๋ฐ์ ์ต์ด์ ๊ฐ์ฒด์ ๋ค์ ๋ฉ์์ง๋ฅผ ์ ์กํ ํ์๋ ์๊ณ ๋จ์ํ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ๊ณ ์ถ์ ๊ฒฝ์ฐ๋ผ๊ณ ํ ์ ์๋ค. ์ด์ฒ๋ผ ์ฒ๋ฆฌ๋ฅผ ์์ฒญํ ๋ self ์ฐธ์กฐ๋ฅผ ์ ๋ฌํ์ง ์๋ ๊ฒฝ์ฐ๋ฅผ ํฌ์๋ฉ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์ด์ ๋ฌ๋ฆฌ self ์ฐธ์กฐ๋ฅผ ์ ๋ฌํ๋ ๊ฒฝ์ฐ์๋ ์์์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์์์ ์ ํํ ์ฉ๋๋ ํด๋์ค๋ฅผ ์ด์ฉํ ์์ ๊ด๊ณ๋ฅผ ๊ฐ์ฒด ์ฌ์ด์ ํฉ์ฑ ๊ด๊ณ๋ก ๋์ฒดํด์ ๋คํ์ฑ์ ๊ตฌํํ๋ ๊ฒ์ด๋ค.
์ผ๊ด์ฑ ์๋ ์ค๊ณ๋ฅผ ์ํ ์กฐ์ธ์ ๋๋ฆฌ ์๋ ค์ง ๋์์ธ ํจํด์ ํ์ตํ๊ณ ๋ณ๊ฒฝ์ด๋ผ๋ ๋ฌธ๋งฅ ์์์ ๋์์ธ ํจํด์ ์ ์ฉํด ๋ณด๋ ๊ฒ์ด๋ค. ๋์์ธ ํจํด์ ํน์ ํ ๋ณ๊ฒฝ์ ๋ํด ์ผ๊ด์ฑ ์๋ ์ค๊ณ๋ฅผ ๋ง๋ค ์ ์๋ ๊ฒฝํ ๋ฒ์น์ ๋ชจ์๋์ ์ผ์ข ์ ์ค๊ณ ํ ํ๋ฆฟ์ด๋ค. ๋์์ธ ํจํด์ ํ์ตํ๋ฉด ๋น ๋ฅธ ์๊ฐ ์์ ์ ๋ฌธ๊ฐ์ ๊ฒฝํ์ ํก์ ํ ์ ์๋ค.
๋น๋ก ๋์์ธ ํจํด์ด ๋ฐ๋ณต์ ์ผ๋ก ์ ์ฉํ ์ ์๋ ์ค๊ณ ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํ๋ค๊ณ ํ๋๋ผ๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์ ํฉํ ํจํด์ ์ฐพ์ ์ ์๋ ๊ฒ์ ์๋๋ค. ๋ฐ๋ผ์ ํ๋ ฅ์ ์ผ๊ด์ฑ ์๊ฒ ๋ง๋ค๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ณธ ์ง์นจ์ ๋ฐ๋ฅด๋ ๊ฒ์ด ๋์์ด ๋๋ค.
- ๋ณํ๋ ๊ฐ๋ ์ ๋ณํ์ง ์๋ ๊ฐ๋ ์ผ๋ก๋ถํฐ ๋ถ๋ฆฌํ๋ผ.
- ๋ณํ๋ ๊ฐ๋ ์ ์บก์ํ ํ๋ผ.
์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฌ๋ผ์ง๋ ๋ถ๋ถ์ ์ฐพ์๋ด๊ณ , ๋ฌ๋ผ์ง์ง ์๋ ๋ถ๋ถ์ผ๋ก๋ถํฐ ๋ถ๋ฆฌ์ํจ๋ค. ์ด๊ฒ์ ์ฌ๋ฌ ์ค๊ณ ์์น ์ค์์ ์ฒซ๋ฒ ์งธ ์์น์ด๋ค. ์ฆ, ์ฝ๋์์ ์๋ก์ด ์๊ตฌ์ฌํญ์ด ์์ ๋๋ง๋ค ๋ฐ๋๋ ๋ถ๋ถ์ด ์๋ค๋ฉด ๊ทธ ํ๋์ ๋ฐ๋์ง ์๋ ๋ค๋ฅธ ๋ถ๋ถ์ผ๋ก๋ถํฐ ๊ณจ๋ผ๋ด์ ๋ถ๋ฆฌํด์ผ ํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค. ์ด ์์น์ ๋ค์๊ณผ ๊ฐ์ ์์ผ๋ก ์๊ฐํ ์๋ ์๋ค. "๋ฐ๋๋ ๋ถ๋ถ์ ๋ฐ๋ก ๋ฝ์์ ์บก์ํํ๋ค. ๊ทธ๋ ๊ฒ ํ๋ฉด ๋์ค์ ๋ฐ๋์ง ์๋ ๋ถ๋ถ์๋ ์ํฅ์ ๋ฏธ์น์ง ์์ ์ฑ๋ก ๊ทธ ๋ถ๋ถ๋ง ๊ณ ์น๊ฑฐ๋ ํ์ฅํ ์ ์๋ค."
S extends T ์ผ ๊ฒฝ์ฐ๋ฅผ ๊ฐ์ .
-
๊ณต๋ณ์ฑ(covariance) : S์ T ์ฌ์ด์ ์๋ธํ์ ๊ด๊ณ๊ฐ ๊ทธ๋๋ก ์ ์ง๋๋ค. ์ด ๊ฒฝ์ฐ ํด๋น ์์น์์ ์๋ธํ์ ์ธ S๊ฐ ์ํผํ์ ์ธ T ๋์ ์ฌ์ฉ๋ ์ ์๋ค. ์ฐ๋ฆฌ๊ฐ ํํ ์ด์ผ๊ธฐํ๋ ๋ฆฌ์ค์ฝํ ์นํ ์์น์ ๊ณต๋ณ์ฑ๊ณผ ๊ด๋ จ๋ ์์น์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
-
๋ฆฌํด ํ์ ๊ณต๋ณ์ฑ(return type covariance) : ๋ถ๋ชจ ํด๋์ค์์ ๊ตฌํ๋ ๋ฉ์๋๋ฅผ ์์ ํด๋์ค์์ ์ค๋ฒ๋ผ์ด๋ฉ ํ ๋ ๋ถ๋ชจ ํด๋์ค์ ์ ์ธํ ๋ฐํํ์ ์ ์๋ธํ์ ์ผ๋ก ์ง์ ํ ์ ์๋ ํน์ฑ์ ๋ฆฌํด ํ์ ๊ณต๋ณ์ฑ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๊ฐ๋จํ๊ฒ ๋งํด์ ๋ฆฌํด ํ์ ๊ณต๋ณ์ฑ์ด๋ ๋ฉ์๋๋ฅผ ๊ตฌํํ ํด๋์ค์ ํ์ ๊ณ์ธต ๋ฐฉํฅ๊ณผ ๋ฆฌํด ํ์ ์ ํ์ ๊ณ์ธต ๋ฐฉํฅ์ด ๋์ผํ ๊ฒฝ์ฐ๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
-
-
๋ฐ๊ณต๋ณ์ฑ(contravariance) : S์ T ์ฌ์ด์ ์๋ธํ์ ๊ด๊ณ๊ฐ ์ญ์ ๋๋ค. ์ด ๊ฒฝ์ฐ ํด๋น ์์น์์ ์ํผํ์ ์ธ T๊ฐ ์๋ธํ์ ์ธ S ๋์ ์ฌ์ฉ๋ ์ ์๋ค.
-
ํ๋ผ๋ฏธํฐ ํ์ ๋ฐ๊ณต๋ณ์ฑ(parameter type contravariance) : ๋ถ๋ชจ ํด๋์ค์์ ๊ตฌํ๋ ๋ฉ์๋๋ฅผ ์์ ํด๋์ค์์ ์ค๋ฒ๋ผ์ด๋ฉํ ๋ ํ๋ผ๋ฏธํฐ ํ์ ์ ๋ถ๋ชจ ํด๋์ค์์ ์ฌ์ฉํ ํ๋ผ๋ฏธํฐ์ ์ํผํ์ ์ผ๋ก ์ง์ ํ ์ ์๋ ํน์ฑ์ ํ๋ผ๋ฏธํฐ ํ์ ๋ฐ๊ณต๋ณ์ฑ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๊ฐ๋จํ๊ฒ ๋งํด์ ํ๋ผ๋ฏธํฐ ํ์ ๋ฐ๊ณต๋ณ์ฑ์ด๋ ๋ฉ์๋๋ฅผ ์ ์ํ ํด๋์ค์ ํ์ ๊ณ์ธต๊ณผ ํ๋ผ๋ฏธํฐ์ ํ์ ๊ณ์ธต์ ๋ฐฉํฅ์ด ๋ฐ๋์ธ ๊ฒฝ์ฐ ์๋ธํ์ ๊ด๊ณ๋ฅผ ๋ง์กฑํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
-
-
๋ฌด๊ณต๋ณ์ฑ(invariance) : S์ T ์ฌ์ด์๋ ์๋ฌด๋ฐ ๊ด๊ณ๊ฐ ์กด์ฌํ์ง ์๋๋ค. ๋ฐ๋ผ์ S๋์ T๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋์ S๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์๋ธํ์ ์ ๋ฉ์๋ ํ๋ผ๋ฏธํฐ๋ ๋ฐ๊ณต๋ณ์ฑ์ ๊ฐ์ ธ์ผ ํ๋ค.





