-
Notifications
You must be signed in to change notification settings - Fork 0
object_oriented_facts_and_mis
- ๊ฐ์ฒด์งํฅ์ด๋ ์์คํ ์ ์ํธ์์ฉํ๋ ์์จ์ ์ธ ๊ฐ์ฒด๋ค์ ๊ณต๋์ฒด๋ก ๋ฐ๋ผ๋ณด๊ณ ๊ฐ์ฒด๋ฅผ ์ด์ฉํด ์์คํ ์ ๋ถํ ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
- ์์จ์ ์ธ ๊ฐ์ฒด๋ ์ํ์ ํ์๋ฅผ ํจ๊ป ์ง๋๋ฉฐ ์ค์ค๋ก ์๊ธฐ ์์ ์ ์ฑ ์์ง๋ ๊ฐ์ฒด๋ฅผ ์๋ฏธํ๋ค.
- ๊ฐ์ฒด๋ ์์คํ ์ ํ์๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ๋ค๋ฅธ ๊ฐ์ฒด์ ํ๋ ฅํ๋ค. ๊ฐ ๊ฐ์ฒด๋ ํ๋ ฅ ๋ด์์ ์ ํด์ง ์ญํ ์ ์ํํ๋ฉฐ ์ญํ ์ ๊ด๋ จ๋ ์ฑ ์์ ์งํฉ์ด๋ค.
- ๊ฐ์ฒด๋ ๋ค๋ฅธ ๊ฐ์ฒด์ ํ๋ ฅํ๊ธฐ ์ํด ๋ฉ์์ง๋ฅผ ์ ์กํ๊ณ , ๋ฉ์์ง๋ฅผ ์์ ํ ๊ฐ์ฒด๋ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ๋๋ฐ ์ ํฉํ ๋ฉ์๋๋ฅผ ์์จ์ ์ผ๋ก ์ ํํ๋ค.
๊ฐ์ฒด๋ ์๋ณ ๊ฐ๋ฅํ ๊ฐ์ฒด ๋๋ ์ฌ๋ฌผ์ด๋ค. ๊ฐ์ฒด๋ ์๋์ฐจ์ฒ๋ผ ๋ง์ง ์ ์๋ ๊ตฌ์ฒด์ ์ธ ์ฌ๋ฌผ์ผ ์๋ ์๊ณ , ์๊ฐ์ฒ๋ผ ์ถ์์ ์ธ ๊ฐ๋ ์ผ ์๋ ์๋ค. ๊ฐ์ฒด๋ ๊ตฌ๋ณ ๊ฐ๋ฅํ ์๋ณ์, ํน์ง์ ์ธ ํ๋, ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์ํ๋ฅผ ๊ฐ์ง๋ค. ์ํํธ์จ์ด ์์์ ๊ฐ์ฒด๋ ์ ์ฅ๋ ์ํ์ ์คํ ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ํตํด ๊ตฌํ๋๋ค.
์ํ๋ ํน์ ์์ ์ ๊ฐ์ฒด๊ฐ ๊ฐ์ง๊ณ ์๋ ์ ๋ณด์ ์งํฉ์ผ๋ก ๊ฐ์ฒด์ ๊ตฌ์กฐ์ ํน์ง์ ํํํ๋ค. ๊ฐ์ฒด์ ์ํ๋ ๊ฐ์ฒด์ ์กด์ฌํ๋ ์ ์ ์ธ ํ๋กํผํฐ์ ๋์ ์ธ ํ๋กํผํฐ ๊ฐ์ผ๋ก ๊ตฌ์ฑ๋๋ค. ๊ฐ์ฒด์ ํ๋กํผํฐ๋ ๋จ์ํ ๊ฐ๊ณผ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ๋งํฌ๋ก ๊ตฌ๋ถํ ์ ์๋ค.
ํ๋์ด๋ ์ธ๋ถ์ ์์ฒญ ๋๋ ์์ ๋ ๋ฉ์์ง์ ์๋ตํ๊ธฐ ์ํด ๋์ํ๊ณ ๋ฐ์ํ๋ ํ๋์ด๋ค. ํ๋์ ๊ฒฐ๊ณผ๋ก ๊ฐ์ฒด๋ ์์ ์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ๋ค๋ฅธ ๊ฐ์ฒด์๊ฒ ๋ฉ์์ง๋ฅผ ์ ๋ฌํ ์ ์๋ค. ๊ฐ์ฒด๋ ํ๋์ ํตํด ๋ค๋ฅธ ๊ฐ์ฒด์ ํ๋ ฅ์ ์ฐธ์ฌํ๋ฏ๋ก ํ๋์ ์ธ๋ถ์ ๊ฐ์์ ์ด์ด์ผ ํ๋ค.
์๋ณ์๋ ์ด๋ค ๊ฐ์ฒด๋ฅผ ๋ค๋ฅธ ๊ฐ์ฒด์ ๊ตฌ๋ถํ๋ ๋ฐ ์ฌ์ฉํ๋ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ค. ๊ฐ์ ์๋ณ์๋ฅผ ๊ฐ์ง์ง ์๊ธฐ ๋๋ฌธ์ ์ํ๋ฅผ ์ด์ฉํ ๋๋ฑ์ฑ ๊ฒ์ฌ๋ฅผ ํตํด ๋ ์ธ์คํด์ค๋ฅผ ๋น๊ตํด์ผ ํ๋ค. ๊ฐ์ฒด๋ ์ํ๊ฐ ๋ณ๊ฒฝ๋ ์ ์๊ธฐ ๋๋ฌธ์ ์๋ณ์๋ฅผ ์ด์ฉํ ๋์ผ์ฑ ๊ฒ์ฌ๋ฅผ ํตํด ๋ ์ธ์คํด์ค๋ฅผ ๋น๊ตํ ์ ์๋ค.
์ฝ๋์ ๋ชจ๋ธ์ ๋ฐ์ ํ๊ฒ ์ฐ๊ด์ํค๋ ๊ฒ์ ์ฝ๋์ ์๋ฏธ๋ฅผ ๋ถ์ฌํ๊ณ ๋ชจ๋ธ์ ์ ์ ํ๊ฒ ํ๋ค.
์๋ฆญ ์๋ฐ์ค(Eric Evans)
๋งํด ํ์ธ๋ฌ๊ฐ [UML Distilled 2ํ]์์ ์ค๋ช ํ ๊ฐ์ฒด์งํฅ ์ค๊ณ ์์ ์กด์ฌํ๋ ์ธ๊ฐ์ง ๊ด์
-
๊ฐ๋ ๊ด์ (Conceptual Perspective)
๊ฐ๋ ๊ด์ ์์ ์ค๊ณ๋ ๋๋ฉ์ธ ์์ ์กด์ฌํ๋ ๊ฐ๋ ๊ณผ ๊ฐ๋ ๋ค ์ฌ์ด์ ๊ด๊ณ๋ฅผ ํํํ๋ค. ๋๋ฉ์ธ์ด๋ ์ฌ์ฉ์๋ค์ด ๊ด์ฌ์ ๊ฐ์ง๊ณ ์๋ ํน์ ๋ถ์ผ๋ ์ฃผ์ ๋ฅผ ๋งํ๋ฉฐ ์ํํธ์จ์ด๋ ๋๋ฉ์ธ์ ์กด์ฌํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฐ๋ฐํ๋ค. ์ด ๊ด์ ์ ์ฌ์ฉ์๊ฐ ๋๋ฉ์ธ์ ๋ฐ๋ผ๋ณด๋ ๊ด์ ์ ๋ฐ์ํ๋ค. ๋ฐ๋ผ์ ์ค์ ๋๋ฉ์ธ์ ๊ท์น๊ณผ ์ ์ฝ์ ์ต๋ํ ์ ์ฌํ๊ฒ ๋ฐ์ํ๋ ๊ฒ์ด ํต์ฌ์ด๋ค. -
๋ช ์ธ ๊ด์ (Specification Perspective)
๋ช ์ธ ๊ด์ ์ ์ด๋ฅด๋ฉด ์ฌ์ฉ์์ ์์ญ์ธ ๋๋ฉ์ธ์ ๋ฒ์ด๋ ๊ฐ๋ฐ์์ ์์ญ์ธ ์ํํธ์จ์ด๋ก ์ด์ ์ด ์ฎ๊ฒจ์ง๋ค. ๋ช ์ธ ๊ด์ ์ ๋๋ฉ์ธ์ ๊ฐ๋ ์ด ์๋๋ผ ์ค์ ๋ก ์ํํธ์จ์ด ์์ ์ด์ ์จ์ฌ๋ ๊ฐ์ฒด๋ค์ ์ฑ ์์ ์ด์ ์ ๋ง์ถ๊ฒ ๋๋ค. ์ฆ, ๊ฐ์ฒด์ ์ธํฐํ์ด์ค๋ฅผ ๋ฐ๋ผ๋ณด๊ฒ ๋๋ค. ๋ช ์ธ ๊ด์ ์์ ํ๋ก๊ทธ๋๋จธ๋ ๊ฐ์ฒด๊ฐ ํ๋ฒฝ์ ์ํด '๋ฌด์'์ ํ ์ ์๋๊ฐ์ ์ด์ ์ ๋ง์ถ๋ค. ์ธํฐํ์ด์ค์ ๊ตฌํ์ ๋ถ๋ฆฌํ๋ ๊ฒ์ ํ๋ฅญํ ๊ฐ์ฒด์งํฅ ์ค๊ณ๋ ๋ณ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์์น์ด๋ผ๋ ์ ์ ๊ธฐ์ตํ๋ผ. ์ํ๊น๊ฒ๋ ๋๋ถ๋ถ์ ๊ฐ์ฒด์งํฅ ์ธ์ด๊ฐ ์ธํฐํ์ด์ค์ ๊ตฌํ์ ํด๋์ค ์์ผ๋ก ์์ด ๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ ๋ง์ ์ค๊ณ์๋ค์ด ์ธํฐํ์ด์ค์ ๊ตฌํ์ ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ผ๋ง๋ ์ค์ํ์ง๋ฅผ ์์ด๋ฒ๋ฆฌ๊ณค ํ๋ค. ๊ฐ์ฒด์งํฅ ์ค๊ณ ๋ถ์ผ์ ์ค๋๋ ๊ฒฉ์ธ์ธ "๊ตฌํ์ด ์๋๋ผ ์ธํฐํ์ด์ค์ ๋ํด ํ๋ก๊ทธ๋๋ฐํ๋ผ[GOF 1994]"๋ฅผ ๋ฐ๋ฅด๋ ๊ฒ์ ๋ช ์ธ ๊ด์ ๊ณผ ๊ตฌํ ๊ด์ ์ ๋ช ํํ๊ฒ ๋ถ๋ฆฌํ๋ ๊ฒ์์ ๋ถํฐ ์์๋๋ค. -
๊ตฌํ ๊ด์ (Implementation Perspective)
๊ตฌํ ๊ด์ ์ ํ๋ก๊ทธ๋๋จธ์ธ ์ฐ๋ฆฌ์๊ฒ ๊ฐ์ฅ ์ต์ํ ๊ด์ ์ผ๋ก, ์ค์ ์์ ์ ์ํํ๋ ์ฝ๋์ ์ฐ๊ด๋ผ ์๋ค. ๊ตฌํ ๊ด์ ์ ์ด์ ์ ๊ฐ์ฒด๋ค์ด ์ฑ ์์ ์ํํ๋ ๋ฐ ํ์ํ ๋์ํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ํ๋ก๊ทธ๋๋จธ๋ ๊ฐ์ฒด์ ์ฑ ์์ '์ด๋ป๊ฒ' ์ํํ ๊ฒ์ธ๊ฐ์ ์ด์ ์ ๋ง์ถ๋ฉฐ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋๋ฐ ํ์ํ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ํด๋์ค์ ์ถ๊ฐํ๋ค.
๊ฐ๋ ๊ด์ , ๋ช ์ธ ๊ด์ , ๊ตฌํ ๊ด์ ์ ๋์ผํ ํด๋์ค๋ฅผ ์ธ ๊ฐ์ง ๋ค๋ฅธ ๋ฐฉํฅ์์ ๋ฐ๋ผ๋ณด๋ ๊ฒ์ ์๋ฏธํ๋ค. ํด๋์ค๋ ์ธ ๊ฐ์ง ๊ด์ ์ด๋ผ๋ ์๊ฒฝ์ ํตํด ์ค๊ณ์ ๊ด๋ จ๋ ๋ค์ํ ์ธก๋ฉด์ ๋๋ฌ๋ผ์ ์๋ค. ํด๋์ค๊ฐ ์์ ํ๋ ๊ฐ๋ ์ ๋๋ฉ์ธ ๊ด์ ์ ๋ฐ์ํ๋ค. ํด๋์ค์ ๊ณต์ฉ ์ธํฐํ์ด์ค๋ ๋ช ์ธ ๊ด์ ์ ๋ฐ์ํ๋ค. ํด๋์ค์ ์์ฑ๊ณผ ๋ฉ์๋๋ ๊ตฌํ ๊ด์ ์ ๋ฐ์ํ๋ค.
ํด๋์ค๋ ์ธ ๊ฐ์ง ๊ด์ ์ ๋ชจ๋ ์์ฉํ ์ ์๋๋ก ๊ฐ๋ , ์ธํฐํ์ด์ค, ๊ตฌํ์ ํจ๊ป ๋๋ฌ๋ด์ผ ํ๋ค. ๋์์ ์ฝ๋ ์์์ ์ธ ๊ฐ์ง ๊ด์ ์ ์ฝ๊ฒ ์๋ณํ ์ ์๋๋ก ๊น๋ํ๊ฒ ๋ถ๋ฆฌํด์ผ ํ๋ค.
๊ฐ์ฒด์งํฅ ๊ด์ ์์ ์ปคํผ ์ ๋ฌธ์ ์ด๋ผ๋ ๋๋ฉ์ธ์ ์๋ ๊ฐ์ฒด, ๋ฉ๋ด ํญ๋ชฉ ๊ฐ์ฒด, ๋ฉ๋ดํ ๊ฐ์ฒด, ๋ฐ๋ฆฌ์คํ ๊ฐ์ฒด, ์ปคํผ ๊ฐ์ฒด๋ก ๊ตฌ์ฑ๋ ์์ ์ธ์์ด๋ค.
์ธ๊ฐ์ ๋๋๋ ์ธ์์ ์ดํดํ๊ธฐ ์ํด ๊ฐ์ฒด๋ฅผ ์ง์ ์ ์ผ๋ก ๋ค๋ฃฐ ์ ์์ ๋งํผ ํจ์จ์ ์ด์ง ๋ชปํ๋ค. ์ฐ๋ฆฌ๊ฐ ํ ์ ์๋ ์ผ์ ๋์ ์ธ ๊ฐ์ฒด๋ฅผ ์ ์ ์ธ ํ์ ์ผ๋ก ์ถ์ํํด์ ๋ณต์ก์ฑ์ ๋ฎ์ถ๋ ๊ฒ์ด๋ค. ํ์ ์ ๋ถ๋ฅ๋ฅผ ์ํด ์ฌ์ฉ๋๋ค๋ ๊ฒ์ ๊ธฐ์ตํ๋ผ. ๋์ผํ ์ํ์ ๋์ผํ ํ๋์ ๊ฐ์ง ์ ์๋ ๊ฐ์ฒด๋ ๊ฐ์ ํ์ ์ ์ธ์คํด์ค๋ก ๋ถ๋ฅํ ์ ์๋ค.
์๋ ๊ฐ์ฒด๋ '์๋ ํ์ '์ ์ธ์คํด์ค๋ก ๋ณผ ์ ์๋ค. ๋ฐ๋ฆฌ์คํ ๊ฐ์ฒด๋ '๋ฐ๋ฆฌ์คํ ํ์ '์ ์ธ์คํด์ค๋ก ๋ณผ ์ ์๋ค. ์๋ฉ๋ฆฌ์นด๋ ธ ์ปคํผ, ์์คํ๋ ์ค ์ปคํผ, ์นดํธ์น๋ ธ ์ปคํผ, ์นด๋ผ๋ฉ ๋งํค์๋๋ ๋ชจ๋ '์ปคํผ ํ์ '์ ์ธ์คํด์ค๋ก ๋ณผ ์ ์๋ค. ๋ฉ๋ดํ ๊ฐ์ฒด๋ '๋ฉ๋ดํ' ํ์ ์ ์ธ์คํด์ค๋ค. ๋ฉ๋ดํ ๊ฐ์ฒด๋ ์๋ฉ๋ฆฌ์นด๋ ธ, ์์คํ๋ ์, ์นด๋ผ๋ฉ ๋งํค์๋, ์นดํธ์น๋ ธ๋ผ๋ ๋ค ๊ฐ์ ๋ฉ๋ด ํญ๋ชฉ ๊ฐ์ฒด๋ฅผ ํฌํจํ ์ ์๋ค. ๋ค ๊ฐ์ ๋ฉ๋ด ํญ๋ชฉ ๊ฐ์ฒด ์ญ์ ๋ชจ๋ ๋์ผํ '๋ฉ๋ด ํญ๋ชฉ ํ์ '์ ์ธ์คํด์ค๋ก ๋ชจ๋ธ๋งํ ์ ์๋ค.
์ปคํผ ์ ๋ฌธ์ ์ ๊ตฌ์ฑํ๋ ๋ฒ์ฃผ๋ก์ ์๋ ํ์ , ๋ฉ๋ดํ ํ์ , ๋ฉ๋ด ํญ๋ชฉ ํ์ , ๋ฐ๋ฆฌ์คํ ํ์ , ์ปคํผ ํ์ ์ด ๊ฐ์ถฐ์ก๋ค. ์ด์ ํ์ ๊ฐ์ ์ด๋ค ๊ด๊ณ๊ฐ ์กด์ฌํ๋์ง ์ดํด๋ณด์.
ํ๋์ ๋ฉ๋ดํ ๊ฐ์ฒด๋ ๋ค์์ ๋ฉ๋ด ํญ๋ชฉ ๊ฐ์ฒด๋ก ๊ตฌ์ฑ๋์ด ์๋ค. ๋ฉ๋ดํ ํ์ ์์ ๋ฉ๋ด ํญ๋ชฉ ํ์ ์ชฝ์ผ๋ก ํฅํ๋ ์ ์ ๊ทธ๋ ค์ง ์์ด ์ฐฌ ๋ง๋ฆ๋ชจ๋ ํฌํจ ๊ด๊ณ ๋๋ ํฉ์ฑ(composition) ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ด๋ ๊ฒ์ผ๋ก ๋ฉ๋ด ํญ๋ชฉ์ด ๋ฉ๋ดํ์ ํฌํจ๋๋ค๋ ์ฌ์ค์ ํํํ๋ค. ๋ฉ๋ด ํญ๋ชฉ ์ข์ธก ์๋์ 4๋ผ๋ ์ซ์๋ ๋ฉ๋ดํ์ ํฌํจ๋๋ ๋ฉ๋ด ํญ๋ชฉ์ด 4๊ฐ๋ผ๋ ๊ฒ์ ์๋ฏธํ๋ค.
์๋ ํ์ ์ ๋ฉ๋ดํ ํ์ ์ ์๊ณ ์์ด์ผ ์ํ๋ ์ปคํผ๋ฅผ ์ ํํ ์ ์๋ค. ๋ฉ๋ดํ ํ์ ์ ์๋์ ์ผ๋ถ๊ฐ ์๋๋ฏ๋ก ์ด ๊ด๊ณ๋ ํฉ์ฑ ๊ด๊ณ๊ฐ ์๋๋ค. ์ด ๊ฒฝ์ฐ ํ์ ๋ค ์ฌ์ด์ ๋จ์ํ ์ ์ผ๋ก ์ฐ๊ฒฐํ๋ค. ์ด ์ฒ๋ผ ํ ํ์ ์ ์ธ์คํด์ค๊ฐ ๋ค๋ฅธ ํ์ ์ ์ธ์คํด์ค๋ฅผ ํฌํจํ์ง๋ ์์ง๋ง ์๋ก ์๊ณ ์์ด์ผ ํ ๊ฒฝ์ฐ ์ด๋ฅผ ์ฐ๊ด(association) ๊ด๊ณ๋ผ๊ณ ํ๋ค.
๋ฐ๋ฆฌ์คํ ํ์ ์ ์ปคํผ๋ฅผ ์ ์กฐํด์ผ ํ๋ฏ๋ก ์ปคํผ ํ์ ์ ์๊ณ ์์ด์ผํ๋ค. ๋ฉ๋ดํ ํ์ ๊ณผ ์ปคํผ ํ์ ์ค ์ด๋ค ๊ฒ๋ ๋ฐ๋ฆฌ์คํ์ ์ผ๋ถ๊ฐ ์๋๋ฏ๋ก ์ด ๊ด๊ณ ์ญ์ ํฌํจ๊ด๊ณ๋ ์๋๋ค.
์ด ๊ทธ๋ฆผ์ ์ปคํผ ์ ์กฐ์ ๊ด๋ จ๋ ๊ฐ์ฒด๋ค์ ํ์ ๊ณผ ๊ด๊ณ๋ฅผ ์ด์ฉํด ์ถ์ํํ ์ผ์ข ์ ๋ชจ๋ธ์ด๋ค. ์ด์ฒ๋ผ ์ํํธ์จ์ด๊ฐ ๋์์ผ๋ก ํ๋ ์์ญ์ธ ๋๋ฉ์ธ์ ๋จ์ํํด์ ํํํ ๋ชจ๋ธ์ ๋๋ฉ์ธ ๋ชจ๋ธ์ด๋ผ๊ณ ํ๋ค.
๊ฐ์ฒด์งํฅ ์ค๊ผ์ ์ฒซ ๋ฒ์จฐ ๋ชฉํ๋ ํ๋ฅญํ ๊ฐ์ฒด๋ฅผ ์ค๊ณํ๋ ๊ฒ์ด ์๋๋ผ ํ๋ฅญํ ํ๋ ฅ์ ์ค๊ณํ๋ ๊ฒ์ด๋ผ๋ ์ ์ ์์ง ๋ง์. ํ๋ฅญํ ๊ฐ์ฒด๋ ํ๋ฅญํ ํ๋ ฅ์ ์ค๊ณํ ๋๋ง ์ป์ ์ ์๋ค.
ํ๋ ฅ์ ์ค๊ณํ ๋๋ ๊ฐ์ฒด๊ฐ ๋ฉ์์ง๋ฅผ ์ ํํ๋ ๊ฒ์ด ์๋๋ผ ๋ฉ์์ง๊ฐ ๊ฐ์ฒด๋ฅผ ์ ํํ๊ฒ ํด์ผ ํ๋ค. ์ด ๋ง์ ๋ฉ์์ง๋ฅผ ๋จผ์ ์ ํํ๊ณ ๊ทธ ํ์ ๋ฉ์์ง๋ฅผ ์์ ํ๊ธฐ์ ์ ์ ํ ๊ฐ์ฒด๋ฅผ ์ ํํด์ผ ํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ด์ ๋ฉ์์ง๋ฅผ ์์ ํ ๊ฐ์ฒด๋ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ ์ฑ
์์ ๋งก๊ฒ ๋๊ณ ๊ฐ์ฒด๊ฐ ์์ ํ๋ ๋ฉ์์ง๋ ๊ฐ์ฒด๊ฐ ์ธ๋ถ์ ์ ๊ณตํ๋ ๊ณต์ฉ ์ธํฐํ์ด์ค์ ํฌํจ๋๋ค.
์ฒซ๋ฒ์งธ ๋ฉ์์ง๋ '์ปคํผ๋ฅผ ์ฃผ๋ฌธํ๋ผ'์ผ ๊ฒ์ด๋ค.
๋ฉ์์ง ์์ ๋ถ์ ํ์ดํ๋ ๋ฉ์์ง์ ๋ด์ ์ ๋ฌ๋ ๋ถ๊ฐ์ ์ธ ์ ๋ณด์ธ ์ธ์๋ฅผ ์๋ฏธํ๋ค.
๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ ๊ฐ์ฒด๋ฅผ ์ฐพ๊ณ ์๋ค๋ฉด ๋จผ์ ๋๋ฉ์ธ ๋ชจ๋ธ์์ ์ฑ ์์ ์ํํ๊ธฐ์ ์ ์ ํ ํ์ ์ด ์กด์ฌํ๋์ง ์ดํด๋ณด๋ผ. ์ ์ ํ ํ์ ์ ๋ฐ๊ฒฌํ๋ค๋ฉด ์ฑ ์์ ์ํํ ๊ฐ์ฒด๋ฅผ ๊ทธ ํ์ ์ ์ธ์คํด์ค๋ก ๋ง๋ค์ด๋ผ. ํ์ค ์์ ๊ฐ์ฒด์ ์ํํธ์จ์ด ๊ฐ์ฒด๊ฐ ์์ ํ ๋์ผํ ์๋ ์๊ฒ ์ง๋ง ์ ์ด๋ ์ํํธ์จ์ด ๊ฐ์ฒด์๊ฒ ํ์ค ๊ฐ์ฒด์ ์ ์ฌํ ์ด๋ฆ์ ๋ถ์ฌ ๋์ผ๋ฉด ์ ์ฌ์ฑ์ ํตํด ์ํํธ์จ์ด ๊ฐ์ฒด๊ฐ ์ํํด์ผ ํ๋ ์ฑ ์๊ณผ ์ํ๋ฅผ ์ข ๋ ์ฝ๊ฒ ์ ์ถํ ์ ์๋ค.
'์ปคํผ๋ฅผ ์ฃผ๋ฌธํ๋ผ'๋ผ๋ ๋ฉ์์ง๋ฅผ ์์ ํ ๊ฐ์ฒด๋ ๋ฌด์์ธ๊ฐ? ๋ค๋ฅธ ๋ง๋ก ํํํด ์ด๋ค ๊ฐ์ฒด๊ฐ ์ปคํผ๋ฅผ ์ฃผ๋ฌธํ ์ฑ ์์ ์ ธ์ผ ํ๋๊ฐ? ๋น์ฐํ ์๋์ผ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ ๊ฐ์ฒด๋ ์๋ ํ์ ์ ์ธ์คํด์ค๋ค. ์ด์ ์๋ ๊ฐ์ฒด๋ ์ปคํผ๋ฅผ ์ฃผ๋ฌธํ ์ฑ ์์ ํ ๋น ๋ฐ์๋ค.
์๋์ด ์ปคํผ๋ฅผ ์ฃผ๋ฌธํ๋ ๋์ค์ ์ค์ค๋ก ํ ์ ์๋ ์ผ์ด ๋ฌด์์ธ์ง ์๊ฐํด๋ณด๋ค. ์๋์ด ํ ๋น๋ ์ฑ ์์ ์ํํ๋ ๋์ค์ ์ค์ค๋ก ํ ์ ์๋ ์ผ์ด ์๋ค๋ฉด ๋ค๋ฅธ ๊ฐ์ฒด์๊ฒ ์ด๋ฅผ ์์ฒญํด์ผ ํ๋ค. ์ด ์์ฒญ์ด ๋ฐ๋ก ์๋ ๊ฐ์ฒด์์ ์ธ๋ถ๋ก ์ ์ก๋๋ ๋ฉ์์ง๋ฅผ ์ ์ํ๋ค.
์๋์ ๋ฉ๋ด ํญ๋ชฉ์ ๋ํด์๋ ์์ง ๋ชปํ๋ค. ๋ฉ๋ด ํญ๋ชฉ์ ๊ณ ๊ฐ์ ์ผ๋ถ๊ฐ ์๋๋ผ ๋ฉ๋ดํ์ ์ผ๋ถ๋ผ๋ ์ฌ์ค์ ๊ธฐ์ตํ๋ผ. ๋ฐ๋ผ์ ๊ณ ๊ฐ์ ์์ ์ด ์ ํํ ๋ฉ๋ด ํญ๋ชฉ์ ๋๊ตฐ๊ฐ๊ฐ ์ ๊ณตํด ์ค ๊ฒ์ ์์ฒญํ๋ค. '๋ฉ๋ด ํญ๋ชฉ์ ์ฐพ์๋ผ'๋ผ๋ ์๋ก์ด ๋ฉ์์ง์ ๋ฑ์ฅ์ด๋ค.
์ด ๊ฒฝ์ฐ ๋ฉ์์ง๋ '๋ฉ๋ด ์ด๋ฆ'์ด๋ผ๋ ์ธ์๋ฅผ ํฌํจํด ํจ๊ป ์ ์กํ๋ค. ํ์ดํ ์๋์ ๋ถ์ ์๋์ผ๋ก ํฅํ๋ ์์ ํ์ดํ๋ ์ด ๋ฉ์์ง๋ฅผ ์์ ํ ๊ฐ์ฒด๊ฐ ์๋์๊ฒ ๋ฌด์์ ์๋ตํด์ผ ํ๋์ง๋ฅผ ๋ํ๋ธ๋ค. ์ด ๊ฒฝ์ฐ '๋ฉ๋ด ํญ๋ชฉ์ ์ฐพ์๋ผ' ๋ผ๋ ๋ฉ์์ง๋ฅผ ์์ ํ ๊ฐ์ฒด๋ '๋ฉ๋ด ์ด๋ฆ'์ ๋์๋๋ '๋ฉ๋ด ํญ๋ชฉ'์ ๋ฐํํด์ผ ํ๋ค.
๋ฉ๋ด ํญ๋ชฉ์ ์ฐพ์ ์ฑ ์์ ๋๊ตฌ์๊ฒ ํ ๋นํ๋ ๊ฒ์ด ์ข์๊น? ๋ฉ๋ด ํญ๋ชฉ์ ๊ฐ์ฅ ์ ์๊ณ ์๋ ๊ฐ์ฒด์๊ฒ ํ ๋นํ๋ ๊ฒ์ด ์ ์ ํ ๊ฒ์ด๋ค. ๋ฉ๋ดํ ๊ฐ์ฒด๋ ๋ฉ๋ด ํญ๋ชฉ ๊ฐ์ฒด๋ฅผ ํฌํจํ๊ธฐ ๋๋ฌธ์ ์ด ์ฑ ์์ ์ฒ๋ฆฌํ ์ ์๋ ๊ฐ์ฅ ์ ์ ํ ํ๋ณด๋ค.
ํ์ค ์์ ๋ฉ๋ดํ์ ์๊ธฐ ์ค์ค๋ก ๋ฉ๋ด ํญ๋ชฉ์ ์ฐพ์ง ์์ ๊ฒ์ด๋ค. ํ์ค ์์์ ๋ฉ๋ดํ์ ์๋์ ์ํด ํผ์ณ์ง๊ฑฐ๋ ๋ซํ์ง๋ ์๋์ ์ธ ์กด์ฌ๋ค. ๊ทธ๋ฌ๋ ๊ฐ์ฒด์งํฅ์ ์ธ๊ณ๋ก ๋ค์ด์ค๋ฉด ์๋์ ์ธ ๋ฉ๋ดํ์ด๋ผ๋ ๊ฐ๋ ์ ๋ ์ด์ ์ ํจํ์ง ์๋ค. ๊ฐ์ฒด์งํฅ ์๊ณ์์๋ ๋ชจ๋ ๊ฐ์ฒด๋ค์ด ๋ฅ๋์ ์ด๋ ์์จ์ ์ธ ์กด์ฌ๋ค. ๋ฉ๋ดํ์ ๋ง์น ์๋ช ์ ๊ฐ์ง ์กด์ฌ์ฒ๋ผ ์๊ธฐ ์ค์ค๋ก ๋ฉ๋ด ํญ๋ชฉ์ ์ฐพ๋๋ค. ๋ฐ๋ผ์ ์ค๊ณ์๋ ๋ฌด์๋ฌผ์ ์๋ฌผ์ฒ๋ผ '์์ธํ' ํด์ผ ํ๋ค. ์ํํธ์จ์ด ์ธ์ ์์ ๋ฉ๋ดํ์ ํ์ค ์์ ๋ฉ๋ดํ์ผ๋ก๋ถํฐ ๋ชจํฐ๋ธ๋ฅผ ๋ฐ์์ง๋ง ํ์ค ์์ ๋ฉ๋ดํ ๋ณด๋ค ๋ ๋ง์ ์ผ์ ํ ์ ์๋ค. ์ํํธ์จ์ด ์์ ๋ฉ๋ดํ์ ํ์ค ์์ ๋ฉ๋ดํ์ด ์ ๊ณตํ๋ ๊ฐ๋ ์ ๊ธฐ๋ฐ์ผ๋ก ํ๊ธฐ ๋๋ฌธ์ ์ด๋ค ์ผ์ ์ํํ๋์ง ์ ์ธํ๊ธฐ๊ฐ ์ฝ๋ค. ์ํํธ์จ์ด ๊ฐ์ฒด๋ ํ์ค ์์ ๊ฐ์ฒด๋ฅผ ๋ชจ๋ฐฉํ๊ฑฐ๋ ์ถ์ํํ ๊ฒ์ด ์๋๋ค. ๋จ์ง ์๋ฏธ๋ฅผ ์ฝ๊ฒ ์ ์ถํ ์ ์๋๋ก '์์ 'ํ ๋ฟ์ด๋ค.
์๋์ ์์ ์ด ์ฃผ๋ฌธํ ์ปคํผ์ ๋ํ ๋ฉ๋ด ํญ๋ชฉ์ ์ป์์ผ๋ ์ด์ ๋ฉ๋ด ํญ๋ชฉ์ ๋ง๋ ์ปคํผ๋ฅผ ์ ์กฐํด๋ฌ๋ผ๊ณ ์์ฒญํ ์ ์๋ค. ์๋ก์ด ์์ฒญ์ ์๋ก์ด ๋ฉ์์ง๊ฐ ํ์ํ๋ค๋ ํ๋ณตํ ์ ํธ๋ค. ์๋์ ์ปคํผ๋ฅผ ์ ์กฐํ๋ ๋ฉ์์ง์ ์ธ์๋ก ๋ฉ๋ด ํญ๋ชฉ์ ์ ๋ฌํ๊ณ ๋ฐํ๊ฐ์ผ๋ก ์ ์กฐ๋ ์ปคํผ๋ฅผ ๋ฐ์์ผ ํ๋ค.
๋๊ฐ ์ปคํผ๋ฅผ ์ ์กฐํด์ผ ํ๋๊ฐ? ๋น์ฐํ ๋ฐ๋ฆฌ์คํ๋ค.
'์ปคํผ๋ฅผ ์ ์กฐํ๋ผ'๋ ๋ฉ์์ง๊ฐ ๋ฐ๋ฆฌ์คํ ๊ฐ์ฒด๋ฅผ ์ ํํ๋ค. ๋ฐ๋ฆฌ์คํ๋ ์ปคํผ๋ฅผ ์ ์กฐํ๋ ๋ฐ ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ์๊ณ ์๋ค. ์๋ฉ๋ฆฌ์นด๋ ธ๋ฅผ ๋ง๋ค๊ธฐ ์ํ ์ง์์ ๋ฐ๋ฆฌ์คํ์ ์ํ๋ก, ๊ธฐ์ ์ ๋ฐ๋ฆฌ์คํ์ ํ๋์ผ๋ก ๊ฐ์ฃผํ ์ ์๋ค. ์ด๋ฐ ๊ด์ ์์ ๋ฐ๋ฆฌ์คํ๋ ์ค์ค๋ก์ ํ๋จ๊ณผ ์ง์์ ๋ฐ๋ผ ํ๋ํ๋ ์์จ์ ์ธ ์กด์ฌ๋ค.
์ปคํผ ์ฃผ๋ฌธ์ ์ํ ํ๋ ฅ์ ์ด์ ๋ฐ๋ฆฌ์คํ๊ฐ ์๋ก์ด ์ปคํผ๋ฅผ ๋ง๋๋ ๊ฒ์ผ๋ก ๋๋๋ค. ํ๋ ฅ์ ํ์ํ ๊ฐ์ฒด์ ์ข ๋ฅ์ ์ฑ ์, ์ฃผ๊ณ ๋ฐ์์ผ ํ๋ ๋ฉ์์ง์ ๋ํ ๋๋ต์ ์ธ ์ค๊ณฝ์ด ์กํ๋ค. ๋จ์ ์ผ์ ๋ฉ์์ง๋ฅผ ์ ์ ํจ์ผ๋ก์จ ๊ฐ ๊ฐ์ฒด์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํ ๊ฐ๋ฅํ ์ ๋๋ก ์์ธํ๊ฒ ์ ์ ํ๋ ๊ฒ์ด๋ค.
์ฐ๋ฆฌ๊ฐ ํ๋ค์ฌ ์ป์ด๋ธ ๊ฒ์ ๊ฐ์ฒด๋ค์ ์ธํฐํ์ด์ค๋ค. ๊ฐ์ฒด๊ฐ ์์ ํ ๋ฉ์์ง๊ฐ ๊ฐ์ฒด์ ์ธํฐํ์ด์ค๋ฅผ ๊ฒฐ์ ํ๋ค๋ ์ฌ์ค์ ๊ธฐ์ตํ๋ผ. ๋ฉ์์ง๊ฐ ๊ฐ์ฒด๋ฅผ ์ ํํ๊ณ , ์ ํ๋ ๊ฐ์ฒด๋ ๋ฉ์์ง๋ฅผ ์์ ์ ์ธํฐํ์ด์ค๋ก ๋ฐ์๋ค์ธ๋ค.
๊ฐ ๊ฐ์ฒด๋ฅผ ํ๋ ฅ์ด๋ผ๋ ๋ฌธ๋งฅ์์ ๋ผ์ด๋ด์ด ์์ ๊ฐ๋ฅํ ๋ฉ์์ง๋ง ์ถ๋ ค๋ด๋ฉด ๊ฐ์ฒด์ ์ธํฐํ์ด์ค๊ฐ ๋๋ค. ๊ฐ์ฒด๊ฐ ์ด๋ค ๋ฉ์์ง๋ฅผ ์์ ํ ์ ์๋ค๋ ๊ฒ์ ๊ทธ ๊ฐ์ฒด์ ์ธํฐํ์ด์ค ์์ ๋ฉ์์ง์ ํด๋นํ๋ ์คํผ๋ ์ด์ ์ด ์กด์ฌํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
์๋ ๊ฐ์ฒด์ ์ธํฐํ์ด์ค ์์๋ '์ ํ์ ์ฃผ๋ฌธํ๋ผ'๋ผ๋ ์คํผ๋ ์ด์ ์ด ํฌํจ๋ผ์ผ ํ๋ค. ๋ฉ๋ดํ ๊ฐ์ฒด์ ์ธํฐํ์ด์ค๋ '๋ฉ๋ด ํญ๋ชฉ์ ์ฐพ์๋ผ'๋ผ๋ ์คํผ๋ ์ด์ ์ ์ ๊ณตํ๋ฉฐ, ๋ฐ๋ฆฌ์คํ ๊ฐ์ฒด์ ์ธํฐํ์ด์ค๋ '์ปคํผ๋ฅผ ์ ์กฐํ๋ผ'๋ผ๋ ์คํผ๋ ์ด์ ์, ์ปคํผ ๊ฐ์ฒด๋ '์์ฑํ๋ผ'๋ผ๋ ์คํผ๋ ์ด์ ์ ์ ๊ณตํ๋ค.
๊ฐ์ฒด์ ํ์ ์ ๊ตฌํํ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ ํด๋์ค๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด๋ค. ํ๋ ฅ์ ํตํด ์๋ณ๋ ํ์ ์ ์คํผ๋ ์ด์ ์ ์ธ๋ถ์์ ์ ๊ทผ ๊ฐ๋ฅํ ๊ณต์ฉ ์ธํฐํ์ด์ค์ ์ผ๋ถ๋ผ๋ ์ฌ์ค์ ๊ธฐ์ตํ๋ผ. ๋ฐ๋ผ์ ์ธํฐํ์ด์ค์ ํฌํจ๋ ์คํผ๋ ์ด์ ์ญ์ ์ธ๋ถ์์ ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ๊ณต์ฉ์ผ๋ก ์ ์ธ๋ผ ์์ด์ผ ํ๋ค. ํด๋์ค์ ์ธํฐํ์ด์ค๋ ์๋ฐ์ ๋ฌธ๋ฒ์ ์ด์ฉํด ํ๊ธฐํ๋ค.
class Customer {
public void order(String menuName) {}
}
class MenuIem {
}
class Menu {
public MenuItem choose(String name) {}
}
class Barista {
public Coffee makeCoffee(MenuItem menuItem) {}
}
class Coffee {
public Coffee(MenuItem menuItem) {}
}
ํด๋์ค์ ์ธํฐํ์ด์ค๋ฅผ ์๋ณํ์ผ๋ฏ๋ก ์ด์ ์คํผ๋ ์ด์
์ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ฉ์๋๋ก ๊ตฌํํ์.
๋จผ์ Customer
์ ํ๋ ฅ์ ์ดํด๋ณด์. Customer
๋ Menu
์๊ฒ menuName
์ ํด๋นํ๋ MenuItem
์ ์ฐพ์๋ฌ๋ผ๊ณ ์์ฒญํด์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ MenuItem
์ ๋ฐ์ ์ด๋ฅผ Barista
์๊ฒ ์ ๋ฌํด์ ์ํ๋ ์ปคํผ๋ฅผ ์ ์กฐํ๋๋ก ์์ฒญํด์ผ ํ๋ค.
๋ฌธ์ ๋ Customer
๊ฐ ์ด๋ป๊ฒ Menu
๊ฐ์ฒด์ Barista
๊ฐ์ฒด์ ์ ๊ทผํ ๊ฒ์ด๋๋ค. ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์๊ฒ ๋ฉ์์ง๋ฅผ ์ ์กํ๊ธฐ ์ํด์๋ ๋จผ์ ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ป์ด์ผ ํ๋ค.
๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ์ป๋ ๋ค์ํ ๋ฐฉ๋ฒ์ด ์์ง๋ง ์ฌ๊ธฐ์๋ Customer
์ order() ๋ฉ์๋์ ์ธ์๋ก Menu
์ Customer
๊ฐ์ฒด๋ฅผ ์ ๋ฌ๋ฐ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ฐธ์กฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ๋ก ํ๋ค. ์ด ๊ฒฐ์ ์ ๊ฒฐ๊ณผ์ ์ผ๋ก Customer
์ ์ธํฐํ์ด์ค๋ฅผ ๋ณ๊ฒฝํ๋ค.
class Customer {
public void order(String menuName, Menu menu, Barista barista) {
MenuItem menuItem = menu.choose(menuName);
Coffee coffee = barista.makeCoffee(menuItem);
...
}
}
๊ตฌํํ์ง ์๊ณ ๋จธ๋ฆฌ์์ผ๋ก๋ง ๊ตฌ์ํ ์ค๊ณ๋ ์ฝ๋๋ก ๊ตฌํํ๋ ๋จ๊ณ์์ ๋๋ถ๋ถ ๋ณ๊ฒฝ๋๋ค. ์ค๊ณ ์์ ์ ๊ตฌํ์ ์ํ ์ค์ผ์น๋ฅผ ์์ฑํ๋ ๋จ๊ณ์ง ๊ตฌํ ๊ทธ ์์ฒด์ผ ์๋ ์๋ค. ์ค์ํ ๊ฒ์ ์ค๊ณ๊ฐ ์๋๋ผ ์ฝ๋๋ค. ๋ฐ๋ผ์ ํ๋ ฅ์ ๊ตฌ์ํ๋ ๋จ๊ณ์ ๋๋ฌด ์ค๋ ์๊ฐ์ ์์ง ๋ง๊ณ ์ต๋ํ ๋นจ๋ฆฌ ์ฝ๋๋ฅผ ๊ตฌํํด์ ์ค๊ณ์ ์ด์์ด ์๋์ง, ์ค๊ณ๊ฐ ๊ตฌํ ๊ฐ๋ฅํ์ง๋ฅผ ํ๋จํด์ผ ํ๋ค. ์ฝ๋๋ฅผ ํตํ ํผ๋๋ฐฑ ์์ด๋ ๊น๋ํ ์ค๊ณ๋ฅผ ์ป์ ์ ์๋ค.
Menu
๋ menuName
์ ํด๋นํ๋ MenuItem
์ ์ฐพ์์ผ ํ๋ ์ฑ
์์ด ์๋ค. ์ด ์ฑ
์์ ์ํํ๊ธฐ ์ํด์๋ Menu
๊ฐ ๋ด๋ถ์ ์ผ๋ก MenuItem
์ ๊ด๋ฆฌํ๊ณ ์์ด์ผ ํ๋ค. ๊ฐ๋จํ๊ฒ Menu
๊ฐ MenuItem
์ ๋ชฉ๋ก์ ํฌํจํ๊ฒ ํ์. Menu
์ choose() ๋ฉ์๋๋ MenuItem
์ ๋ชฉ๋ก์ ํ๋์ฉ ๊ฒ์ฌํด ๊ฐ๋ฉด์ ์ด๋ฆ์ด ๋์ผํ MenuItem
์ ์ฐพ์ ๋ฐํํ๋ค.
class Menu {
private List<MenuItem> items;
public Menu(List<MenuItem> items) {
this.items = items;
}
public MenuItem choose(String name) {
for(MenuItem each : items) {
if (each.getName().equals(name)) {
return each;
}
}
return null;
}
}
MenuItem์ ๋ชฉ๋ก์ Menu์ ์์ฑ์ผ๋ก ํฌํจ์ํจ ๊ฒฐ์ ์ญ์ ํด๋์ค๋ฅผ ๊ตฌํํ๋ ๋์ค์ ๋ด๋ ค์ก๋ค๋ ์ฌ์ค์ ์ฃผ๋ชฉํ๋ผ. ๊ฐ์ฒด์ ์์ฑ์ ๊ฐ์ฒด์ ๋ด๋ถ ๊ตฌํ์ ์ํ๊ธฐ ๋๋ฌธ์ ์บก์ํ๋ผ์ผ ํ๋ค. ๊ฐ์ฒด์ ์์ฑ์ด ์บก์ํ๋๋ค๋ ์ด์ผ๊ธฐ๋ ์ธํฐํ์ด์ค์๋ ๊ฐ์ฒด์ ๋ด๋ถ ์์ฑ์ ๋ํ ์ด๋ค ํํธ๋ ์ ๊ณต๋ผ์๋ ์ ๋๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ด๋ฅผ ์ํ ๊ฐ์ฅ ํ๋ฅญํ ๋ฐฉ๋ฒ์ ์ธํฐํ์ด์ค๋ฅผ ์ ํ๋ ๋จ๊ณ์์๋ ๊ฐ์ฒด๊ฐ ์ด๋ค ์์ฑ์ ๊ฐ์ง๋์ง, ๋ ๊ทธ ์์ฑ์ด ์ด๋ค ์๋ฃ ๊ตฌ์กฐ๋ก ๊ตฌํ๋๋์ง๋ฅผ ๊ณ ๋ คํ์ง ์๋ ๊ฒ์ด๋ค.
๊ฐ์ฒด์๊ฒ ์ฑ ์์ ํ ๋นํ๊ณ ์ธํฐํ์ด์ค๋ฅผ ๊ฒฐ์ ํ ๋๋ ๊ฐ๊ธ์ ๊ฐ์ฒด ๋ด๋ถ์ ๊ตฌํ์ ๋ํ ์ด๋ค ๊ฐ์ ๋ ํ์ง ๋ง์์ผ ํ๋ค. ๊ฐ์ฒด๊ฐ ์ด๋ค ์ฑ ์์ ์ํํ๋์ง๋ฅผ ๊ฒฐ์ ํ ํ์ ์ฑ ์์ ์ํํ๋ ๋ฐ ํ์ํ ๊ฐ์ฒด์ ์์ฑ์ ๊ฒฐ์ ํ๋ผ. ์ด๊ฒ์ด ๊ฐ์ฒด์ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ๊ฐ์ฒด์ ๊ณต์ฉ ์ธํฐํ์ด์ค์ ๋ ธ์ถ์ํค์ง ์๊ณ ์ธํฐํ์ด์ค์ ๊ตฌํ์ ๊น๋ํ๊ฒ ๋ถ๋ฆฌํ ์ ์๋ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ์ด๋ค.
Barista
๋ MenuItem
์ ์ด์ฉํด์ ์ปคํผ๋ฅผ ์ ์กฐํ๋ค.
class Barista {
public Coffee makeCoffee(MenuItem menuItem) {
Coffee coffee = new Coffee(menuItem);
return coffee;
}
}
Coffee
๋ ์๊ธฐ ์์ ์ ์์ฑํ๊ธฐ ์ํ ์์ฑ์๋ฅผ ์ ๊ณตํ๋ค. Coffee
๋ ์ปคํผ ์ด๋ฆ๊ณผ ๊ฐ๊ฒฉ์ ์์ฑ์ผ๋ก ๊ฐ์ง๊ณ ์์ฑ์ ์์์ MenuItem
์ ์์ฒญ์ ๋ณด๋ด ์ปคํผ ์ด๋ฆ๊ณผ ๊ฐ๊ฒฉ์ ์ป์ ํ Coffee
์ ์์ฑ์ ์ ์ฅํ๋ค.
class Coffee {
private String name;
private int price;
public Coffee(MenuItem menuItem) {
this.name = menuItem.getName();
this.price = menuItem.cost();
}
}
MenuItem
์ getName()๊ณผ cost() ๋ฉ์์ง์ ์๋ตํ ์ ์๋๋ก ๋ฉ์๋๋ฅผ ๊ตฌํํด์ผ ํ๋ค.
public class MenuItem {
public MenuItem(String name, int price) {
this.name = name;
this.price = price;
}
public int cost() {
return price;
}
public String getName() {
return this.name;
}
}
์ปคํผ ์ ๋ฌธ์ ์ฝ๋๋ฅผ ํด๋์ค ๋ค์ด์ด๊ทธ๋จ์ ๋ํ๋ธ ๊ฒ์ด๋ค. ๋ช ๊ฐ์ง ์ฌ์ํ ๊ด๊ณ๋ ์๋ตํ์ง๋ง ์ปคํผ ์ ๋ฌธ์ ์ ๊ตฌ์ฑํ๋ ์ค์ํ ์ธก๋ฉด์ ๋ชจ๋ ํฌํจํ๊ณ ์๋ค.
MenuItem์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ฑํ๋ ์คํผ๋ ์ด์ ๋ค์ MenuItem์ ๊ตฌํํ๋ ๋จ๊ณ์ ์์์ผ ์๋ณํ๋ค๋ ์ ์ ๋์ฌ๊ฒจ๋ณด๊ธฐ ๋ฐ๋๋ค. ์ด๊ฒ์ ๋ถ๋๋ฌ์ํด์ผ ํ ์ผ์ด ์๋๋ค. ์ธํฐํ์ด์ค๋ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์ ์ง์ ์ ์ผ๋ก ์ํธ์์ฉํ๋ ํต๋ก๋ค. ์ธํฐํ์ด์ค๋ฅผ ํตํด ์ค์ ์ํธ์์ฉ์ ํด๋ณด์ง ์์ ์ฑ ์ธํฐํ์ด์ค์ ๋ชจ์ต์ ์ ํํ๊ฒ ์์ธกํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅ์ ๊ฐ๊น๋ค. ์ค๊ณ๋ฅผ ๊ฐ๋จํ ๋๋ด๊ณ ์ต๋ํ ๋นจ๋ฆฌ ๊ตฌํ์ ๋์ ํ๋ผ. ๋จธ๋ฆฟ์์ ๊ฐ์ฒด์ ํ๋ ฅ ๊ตฌ์กฐ๊ฐ ๋ฒ๋ฉ์ธ๋ค๋ฉด ๊ทธ๋๋ก ์ฝ๋๋ฅผ ๊ตฌํํ๊ธฐ ์์ํ๋ค. ์ค๊ณ๊ฐ ์ ๋๋ก ๊ทธ๋ ค์ง์ง ์๋๋ค๋ฉด ๊ณ ๋ฏผํ์ง ๋ง๊ณ ์ค์ ๋ก ์ฝ๋๋ฅผ ์์ฑํด๊ฐ๋ฉด์ ํ๋ ฅ์ ์ ์ฒด์ ์ธ ๋ฐ๊ทธ๋ฆผ์ ๊ทธ๋ ค๋ณด๋ผ. ํ ์คํธ-์ฃผ๋ ์ค๊ณ๋ก ์ฝ๋๋ฅผ ๊ตฌํํ๋ ์ฌ๋๋ค์ด ํ๋ ์์ ์ด ๋ฐ๋ก ์ด๊ฒ์ด๋ค. ๊ทธ๋ค์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํด ๊ฐ๋ฉด์ ํ๋ ฅ์ ์ค๊ณํ๋ค.
์ฝ๋๋ ์ธ๊ฐ์ง ๊ด์ ์ ๋ชจ๋ ์ ๊ณตํด์ผ ํ๋ค
๋จผ์ ๊ฐ๋ ๊ด์ ์์ ์ฝ๋๋ฅผ ๋ฐ๋ผ๋ณด๋ฉด Customer, Menu, MenuItem, Barista, Coffeeํด๋์ค๊ฐ ๋ณด์ธ๋ค. ์ด ํด๋์ค๋ค์ ์์ธํ ์ดํด๋ณด๋ฉด ์ปคํผ ์ ๋ฌธ์ ๋๋ฉ์ธ์ ๊ตฌ์ฑํ๋ ์ค์ํ ๊ฐ๋ ๊ณผ ๊ด๊ณ๋ฅผ ๋ฐ์ํ๋ค๋ ์ฌ์ค์ ์ฝ๊ฒ ์ ์ ์๋ค. ์ํํธ์จ์ด ํด๋์ค๊ฐ ๋๋ฉ์ธ ๊ฐ๋ ์ ํน์ฑ์ ์ต๋ํ ์์ฉํ๋ฉด ๋ณ๊ฒฝ์ ๊ด๋ฆฌํ๊ธฐ ์ฝ๊ณ ์ ์ง๋ณด์์ฑ์ ํฅ์์ํฌ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ์ปคํผ๋ฅผ ์ ์กฐํ๋ ์ฌ๋์ ๋ฐ๋ฆฌ์คํ๋ค. ๋ฐ๋ผ์ ํ์ค ์ธ๊ณ์ ๋์ผํ๊ฒ ์ํํธ์จ์ด ์์์๋ Barista๋ผ๋ ํด๋์ค๊ฐ ์ปคํผ๋ฅผ ์ ์กฐํ ๊ฒ์ด๋ผ๊ณ ์ฝ๊ฒ ์ ์ถํ ์ ์๋ค. ์ํํธ์จ์ด ํด๋์ค์ ๋๋ฉ์ธ ํด๋์ค ์ฌ์ด์ ๊ฐ๊ฒฉ์ด ์ข์ผ๋ฉด ์ข์์๋ก ๊ธฐ๋ฅ์ ๋ณ๊ฒฝํ๊ธฐ ์ํด ๋ค์ ๊ฑฐ๋ ค์ผ ํ๋ ์ฝ๋์ ์๋ ์ ์ ์ค์ด๋ ๋ค.
๋ช ์ธ ๊ด์ ์ ํด๋์ค์ ์ธํฐํ์ด์ค๋ฅผ ๋ฐ๋ผ๋ณธ๋ค. ํด๋์ค์ public ๋ฉ์๋๋ ๋ค๋ฅธ ํด๋์ค๊ฐ ํ๋ ฅํ ์ ์๋ ๊ณต์ฉ ์ธํฐํ์ด์ค๋ฅผ ๋๋ฌ๋ธ๋ค. ๊ณต์ฉ ์ธํฐํ์ด์ค๋ ์ธ๋ถ์ ๊ฐ์ฒด๊ฐ ํด๋น ๊ฐ์ฒด์ ์ ๊ทผํ ์ ์๋ ์ ์ผํ ๋ถ๋ถ์ด๋ค. ์ธํฐํ์ด์ค๋ฅผ ์์ ํ๋ฉด ํด๋น ๊ฐ์ฒด์ ํ๋ ค๊ฐ๋ ๋ชจ๋ ๊ฐ์ฒด์๊ฒ ์ํฅ์ ๋ฏธ์น ์๋ฐ์ ์๋ค. ๊ฐ์ฒด์ ์ธํฐํ์ด์ค๋ ์์ ํ๊ธฐ ์ด๋ ต๋ค๋ ์ฌ์ค์ ๋ช ์ฌํ๋ผ. ์ต๋ํ ๋ณํ์ ์์ ์ ์ธ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ ์ธํฐํ์ด์ค๋ฅผ ํตํด ๊ตฌํ๊ณผ ๊ด๋ จ๋ ์ธ๋ถ์ฌํญ์ด ๋๋ฌ๋์ง ์๊ฒ ํด์ผ ํ๋ค. ๋ณํ์ ํ๋ ฅ์ ์ธ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค ์ ์๋ ๋ฅ๋ ฅ์ ๊ฐ์ฒด์งํฅ ์ค๊ณ์์ ์์ค์ ๊ฐ๋ ํ๋ ์ค์ํ ์ฒ๋๋ค.
๊ตฌํ ๊ด์ ์ ํด๋์ค์ ๋ด๋ถ ๊ตฌํ์ ๋ฐ๋ผ๋ณธ๋ค. ํด๋์ค์ ๋ฉ์๋์ ์์ฑ์ ๊ตฌํ์ ์ํ๋ฉฐ ๊ณต์ฉ ์ธํฐํ์ด์ค์ ์ผ๋ถ๊ฐ ์๋๋ค. ๋ฐ๋ผ์ ๋ฉ์๋์ ๊ตฌํ๊ณผ ์์ฑ์ ๋ณ๊ฒฝ์ ์์น์ ์ผ๋ก ์ธ๋ถ์ ๊ฐ์ฒด์๊ฒ ์ํฅ์ ๋ฏธ์ณ์๋ ์๋๋ค. ์ด๊ฒ์ ๋ฉ์๋์ ์์ฑ์ด ์ฒ ์ ํ๊ฒ ํด๋์ค ๋ด๋ถ๋ก ์บก์ํ๋ผ์ผ ํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ๋ฉ์๋์ ์์ฑ์ ํด๋์ค ๋ด๋ถ์ ๋น๋ฐ์ด๋ค. ์ธ๋ถ์ ํด๋์ค๋ ์์ ์ด ํ๋ ฅํ๋ ๋ค๋ฅธ ํด๋์ค์ ๋น๋ฐ ๋๋ฌธ์ ์ฐ์์ข์ํด์๋ ์ ๋๋ค.
์ด๋ค ๋ฉ์์ง๊ฐ ์์ ๋ ๊ทธ ๋ฉ์์ง๋ฅผ ์์ ํ ๊ฐ์ฒด๋ฅผ ์ด๋ป๊ฒ ์ ํํ๋๊ฐ? ์ฒซ ๋ฒ์งธ ์ ๋ต์ ๋๋ฉ์ธ ๊ฐ๋ ์ค์์ ๊ฐ์ฅ ์ ์ ํ ๊ฒ์ ์ ํํ๋ ๊ฒ์ด๋ค. ๋๋ฉ์ธ ๊ฐ๋ ์์์ ์ ์ ํ ๊ฐ์ฒด๋ฅผ ์ ํํ๋ ๊ฒ์ ๋๋ฉ์ธ์ ๋ํ ์ง์์ ๊ธฐ๋ฐ์ผ๋ก ์ฝ๋์ ๊ตฌ์กฐ์ ์๋ฏธ๋ฅผ ์ฝ๊ฒ ์ ์ถํ ์ ์๊ฒ ํ๋ค. ์ด๊ฒ์ ์์คํ ์ ์ ์ง๋ณด์์ฑ์ ์ปค๋ค๋ ์ํฅ์ ๋ฏธ์น๋ค.
์ํํธ์จ์ด๋ ํญ์ ๋ณํ๋ค. ์ค๊ณ๋ ๋ณ๊ฒฝ์ ์ํด ์กด์ฌํ๋ค. ์ฌ๋ฌ ๊ฐ์ ํด๋์ค๋ก ๊ธฐ๋ฅ์ ๋ถํ ํ๊ณ ํด๋์ค ์์์ ์ธํฐํ์ด์ค์ ๊ตฌํ์ ๋ถ๋ฆฌํ๋ ์ด์ ๋ ๋ณ๊ฒฝ์ด ๋ฐ์ํ์ ๋ ์ฝ๋๋ฅผ ์ข ๋ ์์ํ๊ฒ ์์ ํ๊ธธ ๊ฐ์ ํ ์ํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ํํธ์จ์ด ํด๋์ค๊ฐ ๋๋ฉ์ธ ๊ฐ๋ ์ ๋ฐ๋ฅด๋ฉด ๋ณํ์ ์ฝ๊ฒ ๋์ํ ์ ์๋ค.
๋ช ์ธ ๊ด์ ๊ณผ ๊ตฌํ ๊ด์ ์ด ๋ค์์ฌ ์ฌ๋ฌ๋ถ์ ๋จธ๋ฆฌ์์ ํจ๋ถ๋ก ์ด์ง๋ฝํ์ง ๋ชปํ๊ฒ ํ๋ผ. ๋ช ์ธ ๊ด์ ์ ํด๋์ค์ ์์ ์ ์ธ ์ธก๋ฉด์ ๋๋ฌ๋ด์ผ ํ๋ค. ๊ตฌํ ๊ด์ ์ ํด๋์ค์ ๋ถ์์ ํ ์ธก๋ฉด์ ๋๋ฌ๋ด์ผ ํ๋ค. ์ธํฐํ์ด์ค๊ฐ ๊ตฌํ ์ธ๋ถ์ฌํญ์ ๋ ธ์ถํ๊ธฐ ์์ํ๋ฉด ์์ฃผ ์์ ๋ณ๋์๋ ์ ์ฒด ํ๋ ฅ์ด ์๋์น๋ ์ทจ์ฝํ ์ค๊ณ๋ฅผ ์ป์ ์๋ฐ์ ์๋ค.
๋งํด ํ์ธ๋ฌ๋ ๊ฐ๋ ์ ์ธ ๊ด์ ๊ณผ ๋ช ์ธ ๊ด์ ์ฌ์ด๋ ๊ทธ๋ ๊ฒ ์ค์ํ์ง ์์ ๊ฒฝ์ฐ๊ฐ ๋ง์ง๋ง ๋ช ์ธ ๊ด์ ๊ณผ ๊ตฌํ ๊ด์ ์ ๋ถ๋ฆฌํ๋ ๊ฒ์ ๋งค์ฐ ์ค์ํ๋ค๊ณ ์ฃผ์ฅํ๋ค. ํ๋ก๊ทธ๋๋จธ ์ ์ฅ์์ ๊ฐ์ฅ ๋ง์ด ์ ํ๊ฒ ๋๋ ๊ฒ์ ์ฝ๋์ด๋ฏ๋ก ๊ตฌํ ๊ด์ ์ ๊ฐ์ฅ ๋น๋ฒํ๊ฒ ์ฌ์ฉํ๊ฒ ์ง๋ง ์ค์ ๋ก ํ๋ฅญํ ์ค๊ณ๋ฅผ ๊ฒฐ์ ํ๋ ์ธก๋ฉด์ ๋ช ์ธ ๊ด์ ์ธ ๊ฐ์ฒด์ ์ธํฐํ์ด์ค๋ค. ๋ช ์ธ ๊ด์ ์ด ์ค๊ณ๋ฅผ ์ฃผ๋ํ๊ฒ ๋๋ฉด ์ค๊ณ์ ํ์ง์ด ํฅ์๋ ์ ์๋ค๋ ์ฌ์ค์ ๊ธฐ์ตํ๋ผ.
์ค์ํ ๊ฒ์ ์ฌ๋ฌ๋ถ์ด ํด๋์ค๋ฅผ ๋ดค์ ๋ ํด๋์ค๋ฅผ ๋ช ์ธ ๊ด์ ๊ณผ ๊ตฌํ ๊ด์ ์ผ๋ก ๋๋ ๋ณผ์ ์์ด์ผ ํ๋ค๋ ๊ฒ์ด๋ค. ์บก์ํ๋ฅผ ์๋ฐํด์ ๊ตฌํ์ ์ธํฐํ์ด์ค ๋ฐ์ผ๋ก ๋ ธ์ถํด์๋ ์ ๋๊ณ , ์ธํฐํ์ด์ค์ ๊ตฌํ์ ๋ช ํํ๊ฒ ๋ถ๋ฆฌํ์ง ์๊ณ ํ๋ฆฟํ๊ฒ ์์ด๋์์๋ ์ ๋๋ค. ๊ฒฐ๊ตญ ์ธ ๊ฐ์ง ๊ด์ ๋ชจ๋์์ ํด๋์ค๋ฅผ ๋ฐ๋ผ๋ณผ ์ ์์ผ๋ ค๋ฉด ํ๋ฅญํ ์ค๊ณ๊ฐ ๋ท๋ฐ์นจ๋ผ์ผ ํ๋ ๊ฒ์ด๋ค.