์ ์: ์กฐ์ํธ ์ํ: Reading ์ ํ: ๏ฟฝBook
๊ฐ์ฒด์งํฅ์ ํด๋์ค๋ฅผ ์งํฅํ๋ ๊ฒ์ด ์๋, ๊ฐ์ฒด๋ฅผ ์งํฅํ๋ ๊ฒ์ด๋ค.
ํด๋์ค์ ๊ตฌ์กฐ์ ๋งค์๋๊ฐ ์๋๋ผ, ๊ฐ์ฒด์ ์ญํ , ์ฑ ์, ํ๋ ฅ์ ์ง์คํ๋ผ.
- ๊ฐ์ฒด์งํฅ์ด๋ ์์คํ ์ ์ํธ์์ฉํ๋ ์์จ์ ์ธ ๊ฐ์ฒด๋ค์ ๊ณตํต์ฒด๋ก ๋ฐ๋ผ๋ณด๊ณ ๊ฐ์ฒด๋ฅผ ์ด์ฉํด ์์คํ ์ ๋ถํ ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
- ์์จ์ ์ธ ๊ฐ์ฒด๋ ์ํ์ ํ์๋ฅผ ํจ๊ป ์ง๋๋ฉฐ ์ค์ค๋ก ์๊ธฐ ์์ ์ ์ฑ ์์ง๋ ๊ฐ์ฒด๋ฅผ ์๋ฏธํ๋ค.
- ๊ฐ์ฒด๋ ์์คํ ์ ํ์๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ๋ค๋ฅธ ๊ฐ์ฒด์ ํ๋ ฅํ๋ค. ๊ฐ ๊ฐ์ฒด๋ ํ๋ ฅ ๋ด์์ ์ ํด์ง ์ญํ ์ ์ํํ๋ฉฐ ์ญํ ์ ๊ด๋ จ๋ ์ฑ ์์ ์งํฉ์ด๋ค.
- ๊ฐ์ฒด๋ ๋ค๋ฅธ ๊ฐ์ฒด์ ํ๋ ฅํ๊ธฐ ์ํด ๋ฉ์์ง๋ฅผ ์ ์กํ๊ณ , ๋ฉ์์ง๋ฅผ ์์ ํ ๊ฐ์ฒด๋ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ์ ํฉํ ๋ฉ์๋๋ฅผ ์์จ์ ์ผ๋ก ์ ํํ๋ค.
๊ฐ์ฒด์ ๋ค์ํ ํน์ฑ์ ํจ๊ณผ์ ์ผ๋ก ์ค๋ช ํ๊ธฐ ์ํด์๋ ๊ฐ์ฒด๋ฅผ ์ํ(state), ํ๋(behavior), ์๋ณ์(identity)๋ฅผ ์ง๋ ์ค์ฒด๋ก ๋ณด๋ ๊ฒ์ด ๊ฐ์ฅ ํจ๊ณผ์ ์ด๋ค.
์ด ์ฑ ์์๋ ๊ฐ์ฒด๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ๊ธฐ๋ก ํ๋ค.
๊ฐ์ฒด๋ ์๋ณ ๊ฐ๋ฅํ ๊ฐ์ฒด ๋๋ ์ฌ๋ฌผ์ด๋ค. ๊ฐ์ฒด๋ ์๋์ฐจ์ฒ๋ผ ๋ง์ง ์ ์๋ ๊ตฌ์ฒด์ ์ธ ์ฌ๋ฌผ์ผ ์๋ ์๊ณ , ์๊ฐ์ฒ๋ผ ์ถ์์ ์ธ ๊ฐ๋ ์ผ ์๋ ์๋ค. ๊ฐ์ฒด๋ ๊ตฌ๋ณ ๊ฐ๋ฅํ ์๋ณ์, ํน์ง์ ์ธ ํ๋, ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์ํ๋ฅผ ๊ฐ์ง๋ค. ์ํํธ์จ์ด ์์์ ๊ฐ์ฒด๋ ์ ์ฅ๋ ์ํ์ ์คํ ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ํตํด ๊ตฌํ๋๋ค.
์ด ์ฑ ์์๋ ๊ฐ์ฒด์ ์ํ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ๊ธฐ๋ก ํ๋ค.
์ํ๋ ํน์ ์์ ์ ๊ฐ์ฒด๊ฐ ๊ฐ์ง๊ณ ์๋ ์ ๋ณด์ ์งํฉ์ผ๋ก ๊ฐ์ฒด์ ๊ตฌ์กฐ์ ํน์ง์ ํํํ๋ค. ๊ฐ์ฒด์ ์ํ๋ ๊ฐ์ฒด์ ์กด์ฌํ๋ ์ ์ ์ธ ํ๋กํผํฐ์ ๋์ ์ธ ํ๋กํผํฐ ๊ฐ์ผ๋ก ๊ตฌ์ฑ๋๋ค. ๊ฐ์ฒด์ ํ๋กํผํฐ๋ ๋จ์ํ ๊ฐ๊ณผ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ๋งํฌ๋ก ๊ตฌ๋ถํ ์ ์๋ค.
๊ฐ์ฒด๋ ์์จ์ ์ธ ์กด์ฌ๋ค. ๊ฐ์ฒด์งํฅ์ ์ธ๊ณ์์ ๊ฐ์ฒด๋ ๋ค๋ฅธ ๊ฐ์ฒด์ ์ํ์ ์ง์ ์ ์ผ๋ก ์ ๊ทผํ ์๋, ์ํ๋ฅผ ๋ณ๊ฒฝํ ์๋ ์๋ค.
๊ฐ์ฒด์ ํ๋์ ๊ฐ์ฒด์ ์ํ๋ฅผ ๋ณ๊ฒฝ์ํค์ง๋ง ํ๋์ ๊ฒฐ๊ณผ๋ ๊ฐ์ฒด์ ์ํ์ ์์กด์ ์ด๋ค. ์๋ฃ๋ฅผ ๋ง์ ํ์ ์จ๋ฆฌ์ค์ ํค(์ํ)๋ ์๋ฃ๋ฅผ ๋ง์๊ธฐ ์ ์(ํ๋) ์จ๋ฆฌ์ค์ ํค๋ณด๋ค ์์์ ธ์ผ ํ๋ค. ์ด๊ฒ์ ์๋ฃ๋ฅผ ๋ง์๋ ํ๋์ ๊ฒฐ๊ณผ๊ฐ ์จ๋ฆฌ์ค์ ํค(์ํ)์ ์์กดํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ๊ฐ์ฒด์ ํ๋์ ์ํ์ ์ํฅ์ ๋ฐ๋๋ค
- ๊ฐ์ฒด์ ํ๋์ ์ํ๋ฅผ ๋ณ๊ฒฝ์ํจ๋ค
์ด๊ฒ์ ์ํ๋ผ๋ ๊ฐ๋ ์ ์ด์ฉํด ํ๋์ ๋ค์์ ๋ ๊ฐ์ง ๊ด์ ์์ ์์ ํ ์ ์๋ค.
- ์ํธ์์ฉ์ด ํ์ฌ์ ์ํ์ ์ด๋ค ๋ฐฉ์์ผ๋ก ์์กดํ๋๊ฐ
- ์ํธ์์ฉ์ด ์ด๋ป๊ฒ ํ์ฌ์ ์ํ๋ฅผ ๋ณ๊ฒฝ์ํค๋๊ฐ
๊ฐ์ฒด๋ ์ํ๋ฅผ ์บก์ ์์ ๊ฐ์ถฐ๋ ์ฑ ์ธ๋ถ๋ก ๋ ธ์ถํ์ง ์๋๋ค. ๊ฐ์ฒด๊ฐ ์ธ๋ถ์ ๋ ธ์ถํ๋ ๊ฒ์ ํ๋๋ฟ์ด๋ฉฐ, ์ธ๋ถ์์ ๊ฐ์ฒด์ ์ ๊ทผํ ์ ์๋ ์ ์ผํ ๋ฐฉ๋ฒ ์ญ์ ํ๋๋ฟ์ด๋ค. ์ํ๋ฅผ ์ธ๋ถ์ ๋ ธ์ถ์ํค์ง ์๊ณ ํ๋์ ๊ฒฝ๊ณ๋ก ์บก์ํํ๋ ๊ฒ์ ๊ฒฐ๊ณผ์ ์ผ๋ก ๊ฐ์ฒด์ ์์จ์ฑ์ ๋์ธ๋ค. ์์จ์ ์ธ ๊ฐ์ฒด๋ ์ค์ค๋ก ํ๋จํ๊ณ ์ค์ค๋ก ๊ฒฐ์ ํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด์ ์์จ์ฑ์ด ๋์์ง์๋ก ๊ฐ์ฒด์ ์ง๋ฅ๋ ๋์์ง๋ค. ํ๋ ฅ์ ์ฐธ์ฌํ๋ ๊ฐ์ฒด๋ค์ ์ง๋ฅ์ด ๋์์ง์๋ก ํ๋ ฅ์ ์ ์ฐํ๊ณ ๊ฐ๊ฒฐํด์ง๋ค. ๊ฒฐ๋ก ์ ์ผ๋ก ์ํ๋ฅผ ์ ์ ์๋ ํ๋ ์งํฉ ๋ค๋ก ์บก์ํํ๋ ๊ฒ์ ๊ฐ์ฒด์ ์์จ์ฑ์ ๋์ด๊ณ ํ๋ ฅ์ ๋จ์ํ๊ณ ์ ์ฐํ๊ฒ ๋ง๋ ๋ค. ์ด๊ฒ์ด ์ํ๋ฅผ ์บก์ํํด์ผ ํ๋ ์ด์ ๋ค.
์๋ณ์๋ ์ด๋ค ๊ฐ์ฒด๋ฅผ ๋ค๋ฅธ ๊ฐ์ฒด์ ๊ตฌ๋ถํ๋ ๋ฐ ์ฌ์ฉํ๋ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ค. ๊ฐ์ ์๋ณ์๋ฅผ ๊ฐ์ง์ง ์๊ธฐ ๋๋ฌธ์ ์ํ๋ฅผ ์ด์ฉํ ๋๋ฑ์ฑ ๊ฒ์ฌ๋ฅผ ํตํด ๋ ์ธ์คํด์ค๋ฅผ ๋น๊ตํด์ผ ํ๋ค. ๊ฐ์ฒด๋ ์ํ๊ฐ ๋ณ๊ฒฝ๋ ์ ์๊ธฐ ๋๋ฌธ์ ์๋ณ์๋ฅผ ์ด์ฉํ ๋์ผ์ฑ ๊ฒ์ฌ๋ฅผ ํตํด ๋ ์ธ์คํด์ค๋ฅผ ๋น๊ตํ ์ ์๋ค.
๊ฐ์ฒด์ ์ํ๋ฅผ ์กฐํํ๋ ์์ - query
๊ฐ์ฒด์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ์์ - command
์ฌ๋๋ค์ด ๊ฐ์ฒด์งํฅ์ ์ฝ๊ฒ ๋น ์ง๋ ํจ์ ์ ์ํ๋ฅผ ์ค์ฌ์ผ๋ก ๊ฐ์ฒด๋ฅผ ๋ฐ๋ผ๋ณด๋ ๊ฒ์ด๋ค.
์ด๋ณด์๋ค์ ๋จผ์ ๊ฐ์ฒด์ ํ์ํ ์ํ๊ฐ ๋ฌด์์ธ์ง๋ฅผ ๊ฒฐ์ ํ๊ณ ๊ทธ ์ํ์ ํ์ํ ํ๋์ ๊ฒฐ์ ํ๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ด์๊ฐ ์จ๋ฆฌ์ค ๊ฐ์ฒด๋ฅผ ์ค๊ณํ ๋ ์ด๋ณด์๋ค์ ์จ๋ฆฌ์ค ๊ฐ์ฒด์๊ฒ ํ์ํ ์ํ๊ฐ ๋ฌด์์ธ์ง๋ฅผ ์ฐพ๊ณ ํค์ ์์น๋ฅผ ์จ๋ฆฌ์ค์ ์ถ๊ฐํ๋ค. ๊ทธ๋ฌ๊ณ ๋์์ผ ํค์ ์์น๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ์กฐํํ ์ ์๋ ํ๋์ด ๋ฌด์์ธ์ง๋ฅผ ๊ณ ๋ฏผํ๋ค.
์ํ๋ฅผ ๋จผ์ ๊ฒฐ์ ํ๊ณ ํ๋์ ๋์ค์ ๊ฒฐ์ ํ๋ ๋ฐฉ๋ฒ์ ์ค๊ณ์ ๋์ ์ํฅ์ ๋ผ์น๋ค.
- ์ํ๋ฅผ ๋จผ์ ๊ฒฐ์ ํ ๊ฒฝ์ฐ ์บก์ํ๊ฐ ์ ํด๋๋ค. ์ํ์ ์ด์ ์ ๋ง์ถ ๊ฒฝ์ฐ ์ํ๊ฐ ๊ฐ์ฒด ๋ด๋ถ๋ก ๊น๋ํ๊ฒ ์บก์ํ๋์ง ๋ชปํ๊ณ ๊ณต์ฉ ์ธํฐํ์ด์ค์ ๊ทธ๋๋ก ๋ ธ์ถ๋๋ฒ๋ฆด ํ๋ฅ ์ด ๋์์ง๋ค.
- ๊ฐ์ฒด๋ฅผ ํ๋ ฅ์๊ฐ ์๋ ๊ณ ๋ฆฝ๋ ์ฌ์ผ๋ก ๋ง๋ ๋ค. ๊ฐ์ฒด๊ฐ ํ์ํ ์ด์ ๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ฌธ๋งฅ ๋ด์์ ๋ค๋ฅธ ๊ฐ์ฒด์ ํ๋ ฅํ๊ธฐ ์ํด์๋ค. ๋ถํํ๊ฒ๋ ์ํ๋ฅผ ๋จผ์ ๊ณ ๋ คํ๋ ๋ฐฉ์์ ํ๋ ฅ์ด๋ผ๋ ๋ฌธ๋งฅ์์ ๋ฉ๋ฆฌ ๋ฒ์ด๋ ์ฑ ๊ฐ์ฒด๋ฅผ ์ค๊ณํ๊ฒ ํจ์ผ๋ก์จ ์์ฐ์ค๋ฝ๊ฒ ํ๋ ฅ์ ์ ํฉํ์ง ๋ชปํ ๊ฐ์ฒด๋ฅผ ์ฐฝ์กฐํ๊ฒ ๋๋ค.
- ๊ฐ์ฒด์ ์ฌ์ฌ์ฉ์ฑ์ด ์ ํ๋๋ค. ๊ฐ์ฒด์ ์ฌ์ฌ์ฉ์ฑ์ ๋ค์ํ ํ๋ ฅ์ ์ฐธ์ฌํ ์ ์๋ ๋ฅ๋ ฅ์์ ๋์จ๋ค. ์ํ์ ์ด์ ์ ๋ง์ถ ๊ฐ์ฒด๋ ๋ค์ํ ํ๋ ฅ์ ์ฐธ์ฌํ๊ธฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ์ฌ์ฌ์ฉ์ฑ์ด ์ ํ๋ ์๋ฐ์ ์๋ค.
์ฑ ์-์ฃผ๋ ์ค๊ณ (Responsibility-Driven Design, RDD)
ํ๋ ฅ ์์์ ๊ฐ์ฒด์ ํ๋์ ๊ฒฐ๊ตญ ๊ฐ์ฒด๊ฐ ํ๋ ฅ์ ์ฐธ์ฌํ๋ฉด์ ์์ํด์ผ ํ๋ ์ฑ ์์ ์๋ฏธํ๋ค.
3์ฅ ์์๋ถํฐ๋ ์ถ์ํ๋ฅผ ๊ฐ์กฐํ๋ค.
์ถ์ํ
์ด๋ค ์์, ์ธ๋ถ ์ฌํญ, ๊ตฌ์กฐ๋ฅผ ์ข ๋ ๋ช ํํ๊ฒ ์ดํดํ๊ธฐ ์ํด ํน์ ์ ์ฐจ๋ ๋ฌผ์ฒด๋ฅผ ์๋์ ์ผ๋ก ์๋ตํ๊ฑฐ๋ ๊ฐ์ถค์ผ๋ก์จ ๋ณต์ก๋๋ฅผ ๊ทน๋ณตํ๋ ๋ฐฉ๋ฒ์ด๋ค.
๋ณต์ก์ฑ์ ๋ค๋ฃจ๊ธฐ ์ํด ์ถ์ํ๋ ๋ ์ฐจ์์์ ์ด๋ค์ง๋ค.
- ์ฒซ ๋ฒ์งธ ์ฐจ์์ ๊ตฌ์ฒด์ ์ธ ์ฌ๋ฌผ๋ค ๊ฐ์ ๊ณตํต์ ์ ์ทจํ๊ณ ์ฐจ์ด์ ์ ๋ฒ๋ฆฌ๋ ์ผ๋ฐํ๋ฅผ ํตํด ๋จ์ํ๊ฒ ๋ง๋๋ ๊ฒ์ด๋ค.
- ๋ ๋ฒ์งธ ์ฐจ์์ ์ค์ํ ๋ถ๋ถ์ ๊ฐ์กฐํ๊ธฐ ์ํด ๋ถํ์ํ ์ธ๋ถ ์ฌํญ์ ์ ๊ฑฐํจ์ผ๋ก์จ ๋จ์ํ๊ฒ ๋ง๋๋ ๊ฒ์ด๋ค.
๋ชจ๋ ๊ฒฝ์ฐ์ ์ถ์ํ์ ๋ชฉ์ ์ ๋ณต์ก์ฑ์ ์ดํดํ๊ธฐ ์ฌ์ด ์์ค์ผ๋ก ๋จ์ํํ๋ ๊ฒ์ด๋ผ๋ ์ ์ ๊ธฐ์ตํ๋ผ.
๊ฐ์ฒด๋ ํน์ ํ ๊ฐ๋ ์ ์ ์ฉํ ์ ์๋ ๊ตฌ์ฒด์ ์ธ ์ฌ๋ฌผ์ ์๋ฏธํ๋ค. ๊ฐ๋ ์ด ๊ฐ์ฒด์ ์ ์ฉ๋์ ๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ ์ ์ธ์คํด์ค๋ผ๊ณ ํ๋ค.
์จ๋ฆฌ์ค๊ฐ ์๋ง์ ๊ตฐ์๋ค์ ๋จ์ง ํธ๋ผํ์ผ ๋ฟ์ด๋ผ๊ณ ์ผ์ถํ๋ ๊ฒ์ฒ๋ผ ์ฃผ๋ณ์ ๋ณต์กํ ๊ฐ์ฒด๋ค์ ๋จ์ง ๋ช ๊ฐ์ง ๊ฐ๋ ์ ์ธ์คํด์ค์ผ ๋ฟ์ด๋ค.
์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฒด์ ๋ถ๋ฅ ์ฅ์น๋ก์ ๊ฐ๋ ์ ์ด์ผ๊ธฐํ ๋๋ ์๋์ ์ธ ๊ฐ์ง ๊ด์ ์ ํจ๊ป ์ธ๊ธํ๋ค.
- ์ฌ๋ณผ(symbol): ๊ฐ๋
์ ๊ฐ๋ฆฌํค๋ ๊ฐ๋ตํ ์ด๋ฆ์ด๋ ๋ช
์นญ
- ํธ๋ผํ
- ๋ด์ฐ(intension): ๊ฐ๋
์ ์์ ํ ์ ์๋ฅผ ๋ํ๋ด๋ฉฐ ๋ด์ฐ์ ์๋ฏธ๋ฅผ ์ด์ฉํด ๊ฐ์ฒด๊ฐ ๊ฐ๋
์ ์ํ๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์๋ค.
- ๋ชธ์ด ๋ฉ์ํ๊ณ ๋ ์๊ณผ ๋ ๋ฐ์ ๋ค๋ชจ ๊ทํ์ด์ ๋ฌ๋ ค ์๋ ๋ฑ์ฅ์ธ๋ฌผ
- ์ธ์ฐ(extension): ๊ฐ๋
์ ์ํ๋ ๋ชจ๋ ๊ฐ์ฒด์ ์งํฉ(set)
- ์ ์์ฌ, ๋ณ์ฌ, ์ ํ,โฆ,ํํธ์๊ณผ ํํธ ์ฌ์
๋ถ๋ฅ๋ ํน์ ํ ๊ฐ์ฒด๋ฅผ ํน์ ํ ๊ฐ๋ ์ ๊ฐ์ฒด ์งํฉ์ ํฌํจ์ํค๊ฑฐ๋ ํฌํจ์ํค์ง ์๋ ์์ ์ ์๋ฏธํ๋ค.
๋ถ๋ฅ๋ ๊ฐ์ฒด์งํฅ์ ๊ฐ์ฅ ์ค์ํ ๊ฐ๋ ์ค ํ๋์ด๋ค. ์ด๋ค ๊ฐ์ฒด๋ฅผ ์ด๋ค ๊ฐ๋ ์ผ๋ก ๋ถ๋ฅํ ์ง๊ฐ ๊ฐ์ฒด์งํฅ์ ํ์ง์ ๊ฒฐ์ ํ๋ค.
๊ฐ์ฒด๋ฅผ ์ ์ ํ ๊ฐ๋ ์ ๋ฐ๋ผ ๋ถ๋ฅํ์ง ๋ชปํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ง๋ณด์๊ฐ ์ด๋ ต๊ณ ๋ณํ์ ์ฝ๊ฒ ๋์ฒํ์ง ๋ชปํ๋ค. ๋ ์ค์ํ ๊ฒ์ ์ ์ ํ ๋ถ๋ฅ ์ฒด๊ณ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฃจ๋ ๊ฐ๋ฐ์์ ๋จธ๋ฆฟ์์ ๊ฐ์ฒด๋ฅผ ์ฝ๊ฒ ์ฐพ๊ณ ์กฐ์ํ ์ ์๋ ์ ์ ์ ์ธ ์ง๋๋ฅผ ์ ๊ณตํ๋ค๋ ๊ฒ์ด๋ค.
ํ์ ์ ์ถ์ํ๋ค. ํ์ ์ ์ด์ฉํ๋ฉด ๊ฐ์ฒด์ ๋์ ์ธ ํน์ฑ์ ์ถ์ํํ ์ ์๋ค.
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ ์ ์ธ ๋ชจ๋ธ (static model)์ ํด๋์ค๋ฅผ ์ด์ฉํด ๊ตฌํ๋๋ค. ๋ฐ๋ผ์ โํ์ ์ ๊ตฌํโํ๋ ๊ฐ์ฅ ๋ณดํธ์ ์ธ ๋ฐฉ๋ฒ์ ํด๋์ค๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด๋ค. ํด๋์ค์ ํ์ ์ ๋์ผํ ๊ฒ์ด ์๋๋ค. ํ์ ์ ๊ฐ์ฒด๋ฅผ ๋ถ๋ฅํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ฐ๋ ์ด๋ค. ๋ฐ๋ฉด ํด๋์ค๋ ๋จ์ง ํ์ ์ ๊ตฌํํ ์ ์๋ ์ฌ๋ฌ ๊ตฌํ ๋ฉ์ปค๋์ฆ ์ค ํ๋์ผ ๋ฟ์ด๋ค.
ํด๋์ค๋ ํ์ ์ ๊ตฌํ ์ธ์๋ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ๋ ์ฉ๋๋ก๋ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ํด๋์ค์ ํ์ ์ ๋์ผ์ํ๋ ๊ฒ์ ์๋๋ค. ํด๋์ค โ ํ์
๊ฐ์ฒด์งํฅ์ ๊ฐ ์ ๋ฌธํ ์ฌ๋๋ค์ ๊ฐ์ฅ ํํ ์ค์๋ ํ๋ ฅ์ด๋ผ๋ ๋ฌธ๋งฅ์ ๊ณ ๋ คํ์ง ์์ ์ฑ ๊ฐ์ฒด๊ฐ ๊ฐ์ ธ์ผ ํ ์ํ์ ํ๋๋ถํฐ ๊ณ ๋ฏผํ๊ธฐ ์์ํ๋ค๋ ๊ฒ์ด๋ค.
ํ๋ฅญํ ๊ฐ์ฒด์งํฅ ์ค๊ณ์ โ ๊ฐ์ฒด๋ค ๊ฐ์ ์์ฒญ, ์๋ต ์์์ ์ฐฝ๋ฐํ๋ ํ๋ ฅ์ ์ด์ ์ ๋ง์ถฐ ์ ํ๋ฆฌ์ผ์ด์ ์ค๊ณ โ ํ๋ ฅ์ด ์๋ฆฌ๋ฅผ ์ก์ผ๋ฉด ์ ์ ๋ก ๊ฐ์ฒด์ ํ๋์ด ๋๋ฌ๋๊ณ , ๋ค์ด์ด ์ ์ ํ ๊ฐ์ฒด์ ์ํ๊ฐ ๊ฒฐ์ ๋๋ค.
์ฑ ์์ ๊ฐ์ฒด์ ์ธ๋ถ์ ์ ๊ณตํด ์ค ์ ์๋ ์ ๋ณด์ ์ธ๋ถ์ ์ ๊ณตํด์ค ์ ์๋ ์๋น์ค์ ๋ชฉ๋ก์ด๋ค. ๋ฐ๋ผ์ ์ฑ ์์ ๊ฐ์ฒด์ ๊ณต์ฉ ์ธํฐํ์ด์ค(public interface)๋ฅผ ๊ตฌ์ฑํ๋ค. ๊ณต์ฉ ์ธํฐํ์ด์ค์ ๊ฐ๋ ์ ๊ฐ์ฒด์งํฅ์ ์ค์ํ ์๋ฆฌ ์ค ํ๋์ธ ์บก์ํ๋ก ์ด์ด์ง๋ค.
๊ฐ์ฒด์งํฅ ์ค๊ณ๋ ํ๋ ฅ์ ์ฐธ์ฌํ๊ธฐ ์ํด ์ด๋ค ๊ฐ์ฒด๊ฐ ์ด๋ค ์ฑ ์์ ์ํํด์ผ ํ๊ณ ์ด๋ค ๊ฐ์ฒด๋ก๋ถํฐ ๋ฉ์์ง๋ฅผ ์์ ํ ๊ฒ์ธ์ง๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ์ผ๋ก๋ถํฐ ์์๋๋ค. ์ด๋ค ํด๋์ค๊ฐ ํ์ํ๊ณ ์ด๋ค ๋ฉ์๋๋ฅผ ํฌํจํด์ผ ํ๋์ง๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ์ ์ฑ ์๊ณผ ๋ฉ์์ง์ ๋ํ ๋๋ต์ ์ธ ์ค๊ณฝ์ ์ก์ ํ์ ์์ํด๋ ๋ฆ์ง ์๋ค.
์ญํ ์ ๊ฐ๋ ์ ์ฌ์ฉํ๋ฉด ์ ์ฌํ ํ๋ ฅ์ ์ถ์ํํด์ ์ธ์ง ๊ณผ๋ถํ๋ฅผ ์ค์ผ ์ ์๋ค. ๋ํ ๋ค์ํ ๊ฐ์ฒด๋ค์ด ํ๋ ฅ์ ์ฐธ์ฌํ ์ ์๊ธฐ ๋๋ฌธ์ ํ๋ ฅ์ด ์ข ๋ ์ ์ฐํด์ง๋ฉฐ ๋ค์ํ ๊ฐ์ฒด๋ค์ด ๋์ผํ ํ๋ ฅ์ ์ฐธ์ฌํ ์ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฌ์ฉ์ฑ์ด ๋์์ง๋ค. ์ญํ ์ ๊ฐ์ฒด์งํฅ ์ค๊ณ์ ๋จ์์ฑ(simplicity), ์ ์ฐ์ฑ(flexibility), ์ฌ์ฌ์ฉ์ฑ(reusability)์ ๋ท๋ฐ์นจํ๋ ํต์ฌ ๊ฐ๋ ์ด๋ค.
์ญํ ์ ๊ฐ์ฅ ํฐ ๊ฐ์น๋ ํ๋์ ํ๋ ฅ ์์ ์ฌ๋ฌ ์ข ๋ฅ์ ๊ฐ์ฒด๊ฐ ์ฐธ์ฌํ ์ ์๊ฒ ํจ์ผ๋ก์จ ํ๋ ฅ์ ์ถ์ํํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
์ญํ ์ ํ๋ ฅ ์์์ ๊ตฌ์ฒด์ ์ธ ๊ฐ์ฒด๋ก ๋์ฒด๋ ์ ์๋ ์ถ์์ ์ธ ํ๋ ฅ์๋ค. ๋ฐ๋ผ์ ๋ณธ์ง์ ์ผ๋ก ์ญํ ์ ๋ค๋ฅธ ๊ฐ์ฒด์ ์ํด ๋์ฒด ๊ฐ๋ฅํจ์ ์๋ฏธํ๋ค. ์ญํ ์ ๋์ฒด ๊ฐ๋ฅ์ฑ์ ํ์ ํธํ์ฑ์ ์๋ฏธํ๊ณ , ํ์ ํธํ์ฑ์ ๋์ผํ ์ฑ ์์ ์ํ์ ์๋ฏธํ๋ค.
์ด๋ค ์ฑ ์์ ์์๊ฒ, ์ด๋ค ์ฑ ์์ ํ์ ํ ๋ผ์๊ฒ, ์ด๋ค ์ฑ ์์ ๋ชจ์ ์ฅ์์๊ฒ ํ ๋นํ๋ฉด์ ์ฑ ์์ ๊ฐ ๊ฐ์ฒด์๊ฒ ํ ๋นํด ๋๊ฐ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ ๊ฒ ํ ๋จ๋ ์ฑ ์์ ์๊ณผ ํ์ ํ ๋ผ, ๋ชจ์ ์ฅ์๋ผ๋ ๊ฐ์ฒด๋ค์ด ์ธ๋ถ์ ์ ๊ณตํ๊ฒ ๋ ํ๋์ ์ ์ํ๊ฒ ๋๋ค. ์ด์ ํ๋์ด ๊ฒฐ์ ๋์ผ๋ ๊ฐ ๊ฐ์ฒด๊ฐ ํ์๋ก ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ ๊ฒ ๋ฐ์ดํฐ์ ํ๋์ด ๊ฒฐ์ ๋ ํ์์ผ ์๊ณผ ํ์ ํ ๋ผ, ๋ชจ์ ์ฅ์๋ฅผ ๊ตฌํํ๋ ํด๋์ค๋ฅผ ๊ฐ๋ฐํ ์ ์์ ๊ฒ์ด๋ค.
ํ๋ ฅ์ด๋ผ๋ ์คํ ๋ฌธ๋งฅ ์์์ ์ฑ ์์ ๋ถ๋ฐฐํด์ผ ํ๋ค. ๊ฐ ๊ฐ์ฒด๊ฐ ๊ฐ์ ธ์ผ ํ๋ ์ํ์ ํ์์ ๋ํด ๊ณ ๋ฏผํ๊ธฐ ์ ์ ๊ทธ ๊ฐ์ฒด๊ฐ ์ฐธ์ฌํ ๋ฌธ๋งฅ์ธ ํ๋ ฅ์ ์ ์ํ๋ผ.
๊ฐ์ฒด์ ์ฑ ์์ ์ค์ฌ์ผ๋ก ์์คํ ์ ๊ตฌ์ถํ๋ ์ค๊ณ ๋ฐฉ๋ฒ.
์์คํ ์ ๊ธฐ๋ฅ์ ๋ ์์ ๊ท๋ชจ์ ์ฑ ์์ผ๋ก ๋ถํ ๋๊ณ ๊ฐ ์ฑ ์์ ์ฑ ์์ ์ํํ ์ ์ ํ ๊ฐ์ฒด์๊ฒ ํ ๋น๋๋ค. ๊ฐ์ฒด๊ฐ ์ฑ ์์ ์ํํ๋ ๋์ค์ ์ค์ค๋ก ์ฒ๋ฆฌํ ์ ์๋ ์ ๋ณด๋ ๊ธฐ๋ฅ์ด ํ์ํ ๊ฒฝ์ฐ ์ ์ ํ ๊ฐ์ฒด๋ฅผ ์ฐพ์ ํ์ํ ์์ ์ ์์ฒญํ๋ค. ์์ฒญ๋ ์์ ์ ์ํํ๋ ์ผ์ ์ด์ ์์ ์ ์์๋ฐ์ ๊ฐ์ฒด์ ์ฑ ์์ผ๋ก ๋ณํ๋๋ค.
์ด์ฒ๋ผ ์ฑ ์-์ฃผ๋ ์ค๊ณ์์๋ ์์คํ ์ ์ฑ ์์ ๊ฐ์ฒด์ ์ฑ ์์ผ๋ก ๋ณํํ๊ณ , ๊ฐ ๊ฐ์ฒด๊ฐ ์ฑ ์์ ์ํํ๋ ์ค์ ํ์ํ ์ ๋ณด๋ ์๋น์ค๋ฅผ ์ ๊ณตํด์ค ํ๋ ฅ์๋ฅผ ์ฐพ์ ํด๋น ํ๋ ฅ์์๊ฒ ์ฑ ์์ ํ ๋นํ๋ ์์ฐจ์ ์ธ ๋ฐฉ์์ผ๋ก ๊ฐ์ฒด๋ค์ ํ๋ ฅ ๊ณต๋์ฒด๋ฅผ ๊ตฌ์ถํ๋ค. ์ฑ ์-์ฃผ๋ ์ค๊ณ๋ ๊ฐ๋ณ์ ์ธ ๊ฐ์ฒด์ ์ํ๊ฐ ์๋๋ผ ๊ฐ์ฒด์ ์ฑ ์๊ณผ ์ํธ์์ฉ์ ์ง์คํ๋ค.
- ์์คํ ์ด ์ฌ์ฉ์์๊ฒ ์ ๊ณตํด์ผ ํ๋ ๊ธฐ๋ฅ์ธ ์์คํ ์ฑ ์์ ํ์ ํ๋ค.
- ์์คํ ์ฑ ์์ ๋ ์์ ์ฑ ์์ผ๋ก ๋ถํ ํ๋ค.
- ๋ถํ ๋ ์ฑ ์์ ์ํํ ์ ์๋ ์ ์ ํ ๊ฐ์ฒด ๋๋ ์ญํ ์ ์ฐพ์ ์ฑ ์์ ํ ๋นํ๋ค.
- ๊ฐ์ฒด๊ฐ ์ฑ ์์ ์ํํ๋ ์ค์ ๋ค๋ฅธ ๊ฐ์ฒด์ ๋์์ด ํ์ํ ๊ฒฝ์ฐ ์ด๋ฅผ ์ฑ ์์ง ์ ์ ํ ๊ฐ์ฒด ๋๋ ์ญํ ์ ์ฐพ๋๋ค.
- ํด๋น ๊ฐ์ฒด ๋๋ ์ญํ ์๊ฒ ์ฑ ์์ ํ ๋นํจ์ผ๋ก์จ ๋ ๊ฐ์ฒด๊ฐ ํ๋ ฅํ๊ฒ ํ๋ค.
์ญํ , ์ฑ ์, ํ๋ ฅ์ ์ ์ฐํ๊ณ ๊ฒฌ๊ณ ํ ๊ฐ์ฒด์งํฅ ์์คํ ์ ๋ง๋๋ ๋ฐ ํ์ํ ๊ฐ์ฅ ์ค์ํ ์ฌ๋ฃ๋ค. ๊ทธ ์ธ์ ์ฅ์น๋ ๋จ์ง ์ญํ , ์ฑ ์, ํ๋ ฅ์ ๋ณด์ํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณต์ก๋๋ฅผ ์ค์ด๊ธฐ ์ํด ํ์ํ ๋ณด์กฐ ์ฌ๋ฃ์ผ ๋ฟ์ด๋ค. ์ญํ , ์ฑ ์, ํ๋ ฅ์ ์ง์คํ๋ผ.
์จ๋ฆฌ์คํฐ ์ฝ์ค๋ฒ์ ๋ฐ๋ฅด๋ฉด ํจ๊ณผ์ ์ผ๋ก ์ผํ๋ ์ฌ๋๋ค์ ํ ๊ฐ์ง ํน์ง์ ์๋ฌด๊ฒ๋ ์๋ ์ํ์์ ์์ ์ ์์ํ์ง ์๊ณ ์ด์ ์ ํ๋ฅญํ ๊ฒฐ๊ณผ๋ฌผ์ ๋ชจ๋ฐฉํ๊ณ ์ฝ๊ฐ์ ์์ ์ ๊ฑฐ์ณ ์ํ๋ ๊ฒฐ๊ณผ๋ฌผ์ ๋ง๋ค์ด ๋ธ๋ค๋ ๊ฒ์ด๋ค.
ํจํด์ ํน์ ํ ์ํฉ์์ ์ค๊ณ๋ฅผ ๋๊ธฐ ์ํด ๋ชจ๋ฐฉํ๊ณ ์์ ํ ์ ์๋ ๊ณผ๊ฑฐ์ ์ค๊ณ ๊ฒฝํ์ด๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋์์ธ ํจํด์ ๋ฐ๋ณต์ ์ผ๋ก ๋ฐ์ํ๋ ๋ฌธ์ ์ ๊ทธ ๋ฌธ์ ์ ๋ํ ํด๋ฒ์ ์์ผ๋ก ์ ์๋๋ค. ํจํด์ ํด๊ฒฐํ๋ ค๊ณ ํ๋ ๋ฌธ์ ๊ฐ ๋ฌด์์ธ์ง๋ฅผ ๋ช ํํ๊ฒ ์์ ํ๊ณ , ํจํด์ ์ ์ฉํ ์ ์๋ ์ํฉ๊ณผ ์ ์ฉํ ์ ์๋ ์ํฉ์ ํจ๊ป ์ค๋ช ํ๋ค. ํจํด์ ๋ฐ๋ณตํด์ ์ผ์ด๋๋ ํน์ ํ ์ํฉ์์ ์ด๋ค ์ค๊ณ๊ฐ ์(why) ๋ ํจ๊ณผ์ ์ธ์ง์ ๋ํ ์ด์ ๋ฅผ ์ค๋ช ํ๋ค.
๋์์ธ ํจํด๊ณผ ๊ด๋ จ๋ ๊ฐ์ฅ ์ ๋ช ํ ํจํด ์ฑ ์ GOF์ โ๋์์ธ ํจํดโ์ผ๋ก, 23๊ฐ์ ๋์์ธ ํจํด๋ค์ ์์ธํ๊ฒ ์ ๋ฆฌํด ๋์๋ค.
์ ์์ผ ๋ฐฉ๋ฒ๋ก ์ ํ ์ข ๋ฅ์ธ XP์ ๊ธฐ๋ณธ ํ๋ํฐ์ค๋ก ์๊ฐ๋๋ฉด์ ์ฃผ๋ชฉ๋ฐ๊ธฐ ์์ํ ์ค๊ณ ๊ธฐ๋ฒ์ด๋ค. ํ ์คํธ-์ฃผ๋ ๊ฐ๋ฐ์ ๊ธฐ๋ณธ ํ๋ฆ์ ์คํจํ๋ ํ ์คํธ๋ฅผ ์์ฑํ๊ณ , ํ ์คํธ๋ฅผ ํต๊ณผํ๋ ๊ฐ์ฅ ๊ฐ๋จํ ์ฝ๋๋ฅผ ์์ฑํ ํ (์ด ์๊ฐ ๋์์๋ ์ค๋ณต์ด ์์ด๋ ๋ฌด๋ฐฉํ๋ค). ๋ฆฌํฉํฐ๋ง์ ํตํด ์ค๋ณต์ ์ ๊ฑฐํ๋ ๊ฒ์ด๋ค. โ์๋ํ๋ ๊น๋ํ ์ฝ๋ (clean code that works)โ๋ฅผ ์ป์ ์ ์๋ค.
ํ ์คํธ-์ฃผ๋ ๊ฐ๋ฐ์ ํ ์คํธ๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ ์ฑ ์์ ์ํํ ๊ฐ์ฒด ๋๋ ํด๋ผ์ด์ธํธ๊ฐ ๊ธฐ๋ํ๋ ๊ฐ์ฒด์ ์ญํ ์ด ๋ฉ์์ง๋ฅผ ์์ ํ ๋ ์ด๋ค ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๊ณ ๊ทธ ๊ณผ์ ์์ ์ด๋ค ๊ฐ์ฒด์ ํ๋ ฅํ ๊ฒ์ธ์ง์ ๋ํ ๊ธฐ๋๋ฅผ ์ฝ๋์ ํํ๋ก ์์ฑํ๋ ๊ฒ์ด๋ค.
์ฑ ์-์ฃผ๋ ์ค๊ณ์ ๊ธฐ๋ณธ ๊ฐ๋ ๊ณผ ๋ค์ํ ์์น๊ณผ ํ๋ํฐ์ค, ํจํด์ ์ข ํฉ์ ์ผ๋ก ์ดํดํ๊ณ ์ข์ ์ค๊ณ์ ๋ํ ๊ฐ๊ฐ๊ณผ ๊ฒฝํ์ ๊ธธ๋ฌ์ผ๋ง ์ ์ฉํ ์ ์๋ ์ค๊ณ ๊ธฐ๋ฒ์ด๋ค. ์ญํ , ์ฑ ์, ํ๋ ฅ์ ์ง์คํ๊ณ ๊ฐ์ฒด์งํฅ์ ์์น์ ์ ์ฉํ๋ ค๋ ๊น์ด ์๋ ๊ณ ๋ฏผ๊ณผ ๋ ธ๋ ฅ์ ํตํด์๋ง ํ ์คํธ-์ฃผ๋ ๊ฐ๋ฐ์ ํํ์ ๋๋ฆด ์ ์๋ค.
์๋๋ โ๋ฉ์์งโ์ด๋ค. ํ๋ฅญํ๊ณ ์ฑ์ฅ ๊ฐ๋ฅํ ์์คํ ์ ๋ง๋ค๊ธฐ ์ํ ํต์ฌ์ ๋ชจ๋ ๋ด๋ถ์ ์์ฑ๊ณผ ํ๋์ด ์ด๋ค๊ฐ๋ณด๋ค๋ ๋ชจ๋์ด ์ด๋ป๊ฒ ์ปค๋ฎค๋์ผ์ด์ ํ๋๊ฐ์ ๋ฌ๋ ค์๋ค. -์จ๋ฐ ์ผ์ด[Kay 1998]
๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์๊ฒ ์ ๊ทผํ ์ ์๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ์์ฒญ์ ์ ์กํ๋ ๊ฒ๋ฟ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ์์ฒญ์ ์ฐ๋ฆฌ๋ ๋ฉ์์ง๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๋ฉ์์ง ์ ์ก์ ์์ ์. ๋ฉ์์ง ์ด๋ฆ, ์ธ์(argument)์ ์กฐํฉ์ด๋ค.
๋ชจ์์ฅ์.์ฆ์ธํ๋ผ(์ด์ , ์๊ตญ)
์ฌ๊ธฐ์๋ C++, ์๋ฐ, C# ๋ฑ์ ์ธ์ด์์ ์ฌ์ฉ๋๋ ๋ฉ์์ง ์ ์ก ๋ฌธ๋ฒ์ ์ฌ์ฉํ์ง๋ง ์ค์ ๋ก ๋ฉ์์ง ์ ์ก ๋ฌธ๋ฒ์ ์ธ์ด์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์๋ค. ์๋ฅผ ๋ค์ด, ์ค๋ชฐํ ํฌ์์๋ โ๋ชจ์์ฅ์ ์ฆ์ธํ๋ผ:์ด์ ์ด๋์:์๊ตญโ ๊ณผ ๊ฐ์ ๋ฌธ๋ฒ์ ์ด์ฉํ๋ฉฐ, ๋ฃจ๋น์ ๊ฒฝ์ฐ ์ธ์๋ค์ด ๋ชจํธํ์ง ์๋ค๋ฉด โ๋ชจ์์ฅ์.์ฆ์ธํ๋ผ ์ด์ , ์๊ตญโ ๊ณผ ๊ฐ์ ๋ฌธ๋ฒ์ ์ฌ์ฉํ ์ ์๋ค. ์ค์ํ ๊ฒ์ ๋ฉ์์ง ์ ์ก ๋ฌธ๋ฒ์ด ์๋๋ผ ๋ฉ์์ง ์ ์ก์ ๊ตฌ์ฑํ๋ ์์๋ค. ๋ฉ์์ง ์ ์ก์ด ์์ ์, ๋ฉ์์ง ์ด๋ฆ, ์ธ์์ ์กฐํฉ์ผ๋ก ๊ตฌ์ฑ๋๋ค๋ ๊ฒ์ ๊ธฐ์ตํ๋ ๊ฒ์ด ์ค์ํ๋ค.
๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋ด๋ถ์ ์ผ๋ก ์ ํํ๋ ๋ฐฉ๋ฒ์ ๋ฉ์๋๋ผ๊ณ ํ๋ค.
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ๋ฉ์๋๋ ํด๋์ค ์์ ํฌํจ๋ ํจ์ ๋๋ ํ๋ก์์ ๋ฅผ ํตํด ๊ตฌํ๋๋ค.
๋ฉ์์ง๋ฅผ ์์ ํ ๊ฐ์ฒด๊ฐ ์คํ์๊ฐ์ ๋ฉ์๋๋ฅผ ์ ํํ ์ ์๋ค๋ ์ฌ์ค์ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ๊ตฌ๋ถ์ง๋ ํต์ฌ์ ์ธ ํน์ง ์ค ํ๋๋ค.
๋คํ์ฑ์ด๋ ์๋ก ๋ค๋ฅธ ์ ํ์ ๊ฐ์ฒด๊ฐ ๋์ผํ ๋ฉ์์ง์ ๋ํด ์๋ก ๋ค๋ฅด๊ฒ ๋ฐ์ํ๋ ๊ฒ์ ์๋ฏธํ๋ค. - ์๋ก ๋ค๋ฅธ ํ์ ์ ์ํ๋ ๊ฐ์ฒด๋ค์ด ๋์ผํ ๋ฉ์์ง๋ฅผ ์์ ํ ๊ฒฝ์ฐ ์๋ก ๋ค๋ฅธ ๋ฉ์๋๋ฅผ ์ด์ฉํด ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ๋ฉ์ปค๋์ฆ์ ๊ฐ๋ฆฌํจ๋ค.
๋คํ์ฑ์ ๊ฐ์ฒด๋ค์ ๋์ฒด ๊ฐ๋ฅ์ฑ์ ์ด์ฉํด ์ค๊ณ๋ฅผ ์ ์ฐํ๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ๋ง๋ ๋ค. ๋คํ์ฑ์ ์ฌ์ฉํ๋ฉด ์ก์ ์๊ฐ ์์ ์์ ์ข ๋ฅ๋ฅผ ๋ชจ๋ฅด๋๋ผ๊ณ ๋ฉ์์ง๋ฅผ ์ ์กํ ์ ์๋ค. ์ฆ, ๋คํ์ฑ์ ์์ ์์ ์ข ๋ฅ๋ฅผ ์บก์ํํ๋ค.
๋คํ์ฑ์ ์ฌ์ฉํ๋ฉด ๋ฉ์์ง๋ฅผ ์ดํดํ ์ ์๋ ์ด๋ค ๊ฐ์ฒด์๋ ํ๋ ฅํ ์ ์๋ ์ ์ฐํ๊ณ ํ์ฅ ๊ฐ๋ฅํ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค ์ ์๋ค.
๊ฐ์ฒด-์งํฅ ์์คํ ์ ํ๋ ฅํ๋ ๊ฐ์ฒด๋ค์ ์ฐ๊ฒฐ๋ง(web)์ด๋ค. ์์คํ ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ํธ ๊ฐ์ ๋ฉ์์ง๋ฅผ ์ก์ ํ ์ ์๊ฒ ์ด๋ค์ ๋ผ์ ๋ง์ถค์ผ๋ก์จ ๊ตฌ์ถ๋๋ค. ์์คํ ์ ํ์๋ ๊ฐ์ฒด๋ค์ ์กฐํฉ์ผ๋ก ์ฐฝ๋ฐ๋๋ ์์ฑ์ด๋ค. ์ด๊ฒ์ ๊ฐ์ฒด์ ์กฐํฉ์ ๋ณ๊ฒฝํจ์ผ๋ก์จ ์์คํ ์ ํ์๋ฅผ ๋ณ๊ฒฝํ ์ ์๊ฒ ํ๋ค. ๊ฐ์ฒด์ ์กฐํฉ์ ๊ด๋ฆฌํ๊ธฐ ์ํด ์์ฑํ๋ ์ฝ๋๋ ๊ฐ์ฒด ์ฐ๊ฒฐ๋ง์ด ์ด๋ป๊ฒ ํ๋ํ ๊ฒ์ธ์ง์ ๋ํ ์ ์ธ์ ์ธ ์ ์๋ค. ๊ฐ์ฒด๊ฐ ์ด๋ป๊ฒ ํ ๊ฒ์ธ์ง๋ณด๋ค๋ ๋ฌด์์ ํ ๊ฒ์ธ์ง์ ์ด์ ์ ๋ง์ถ๊ธฐ ๋๋ฌธ์ ์์คํ ์ ํ์๋ฅผ ๋ณ๊ฒฝํ๊ธฐ๊ฐ ์ฝ๋ค.
ํด๋์ค๋ ๋จ์ง ๋์ ์ธ ๊ฐ์ฒด๋ค์ ํน์ฑ๊ณผ ํ์๋ฅผ ์ ์ ์ธ ํ ์คํธ๋ก ํํํ๊ธฐ ์ํด ์ฌ์ฉํ ์ ์๋ ์ถ์ํ ๋๊ตฌ์ผ ๋ฟ์ด๋ค. ์ค์ํ๊ฑด, ํด๋์ค๊ฐ ์๋๋ผ ๊ฐ์ฒด๋ค. ํด๋์ค๋ฅผ ์ ์ํ๋ ๊ฒ์ด ๋จผ์ ๊ฐ ์๋๋ผ ๊ฐ์ฒด๋ค์ ์์ฑ๊ณผ ํ์๋ฅผ ์๋ณํ๋ ๊ฒ์ด ๋จผ์ ๋ค. ํด๋์ค๋ ๊ฐ์ฒด์ ์์ฑ๊ณผ ํ์๋ฅผ ๋ด๋ ํ์ผ ๋ฟ์ด๋ค. ์ฌ์ง์ด๋ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ ๊ฐ์ฒด์ ์์ฑ๊ณผ ํ์๋ฅผ ํํํ ์๋ ์๋ค.
ํด๋์ค๋ฅผ ์ค์ฌ์ ๋๋ ์ค๊ณ๋ ์ ์ฐํ์ง ๋ชปํ๊ณ ํ์ฅํ๊ธฐ ์ด๋ ต๋ค. ๊ฐ์ฒด์งํฅ ํจ๋ฌ๋ค์์ผ๋ก์ ์ ํ์ ์์คํ ์ ์ ์ ์ธ ํด๋์ค๋ค์ ์งํฉ์ด ์๋๋ผ ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋์ ์ธ ๊ฐ์ฒด๋ค์ ์งํฉ์ผ๋ก ๋ฐ๋ผ๋ณด๋ ๊ฒ์์ ์์๋๋ค.
์ง์ ํ ๊ฐ์ฒด์งํฅ ํจ๋ฌ๋ค์์ผ๋ก์ ๋์ฝ์ ๊ฐ๋ณ์ ์ธ ๊ฐ์ฒด๊ฐ ์๋๋ผ ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฐ์ฒด๋ค ์ฌ์ด์ ์ปค๋ฎค๋์ผ์ด์ ์ ์ด์ ์ ๋ง์ถ ๋ ์ผ์ด๋๋ค.
๊ฐ์ฒด๊ฐ ๋ฉ์์ง๋ฅผ ์ ํ X ๋ฉ์์ง๊ฐ ๊ฐ์ฒด๋ฅผ ์ ํํ๊ฒ ํด์ผํ๋ค. ๋ฉ์์ง๊ฐ ๊ฐ์ฒด๋ฅผ ์ ํํ๊ฒ ๋ง๋ค๋ ค๋ฉด ๋ฉ์์ง๋ฅผ ์ค์ฌ์ผ๋ก ํ๋ ฅ์ ์ค๊ณํด์ผ ํ๋ค.
์ฑ ์-์ฃผ๋ ์ค๊ณ์ ํต์ฌ์ ์ด๋ค ํ์๊ฐ ํ์ํ์ง๋ฅผ ๋จผ์ ๊ฒฐ์ ํ ํ์ ์ด ํ์๋ฅผ ์ํํ ๊ฐ์ฒด๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ์ด๋ค. ์ด ๊ณผ์ ์ ํํ what/who ์ฌ์ดํด[Budd 2001] ์ด๋ผ๊ณ ํ๋ค. ์ด ์ฌ์ดํด ์ฉ์ด๊ฐ ์๋ฏธํ๋ ๊ฒ์ ๊ฐ์ฒด ์ฌ์ด์ ํ๋ ฅ ๊ด๊ณ๋ฅผ ์ค๊ณํ๊ธฐ ์ํด์๋ ๋จผ์ โ์ด๋ค ํ์(what)โ๋ฅผ ์ํํ ๊ฒ์ธ์ง๋ฅผ ๊ฒฐ์ ํ ํ์ โ๋๊ฐ(who)โ ๊ทธ ํ์๋ฅผ ์ํํ ๊ฒ์ธ์ง๋ฅผ ๊ฒฐ์ ํด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
์ฑ ์-์ฃผ๋ ์ค๊ณ๋ ๊ฐ์ฒด๊ฐ ์๋๋ผ ๊ฐ์ฒด๋ค์ด ์ฃผ๊ณ ๋ฐ๋ ๋ฉ์์ง์ ์ด์ ์ ๋ง์ถ๊ฒ ํจ์ผ๋ก์จ ๊ฐ์ฒด์งํฅ์ ์ฅ์ ์ ๊ทน๋ํํ๋ค. ๋ฉ์์ง๋ฅผ ๊ฒฐ์ ํ๊ธฐ ์ ๊น์ง๋ ๊ฐ์ฒด์ ๊ดํด ๊ณ ๋ฏผํ์ง ๋ง์์ผ ํ๋ค. ์ผ๋จ ๋ฉ์์ง๊ฐ ๊ฒฐ์ ๋ ํ์์ผ ์ด ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ ๊ฐ์ฒด๋ฅผ ์ ํํ๋ค.
๋ฉ์์ง๋ฅผ ๊ฒฐ์ ํ๋ ์์ ์์๋ ์ด๋ค ๊ฐ์ฒด๊ฐ ๋ฉ์์ง๋ฅผ ์์ ํ ๊ฒ์ธ์ง๋ฅผ ์ ์ ์๊ธฐ ๋๋ฌธ์ ๋น์ฐํ ๋ฉ์์ง ์ก์ ์๋ ๋ฉ์์ง๋ฅผ ์์ ํ ๊ฐ์ฒด์ ๋ด๋ถ ์ํ๋ฅผ ๋ณผ ์ ์๋ค. ๋ฐ๋ผ์ ๋ฉ์์ง ์ค์ฌ์ ์ค๊ณ๋ ๋ฉ์์ง ์์ ์์ ์บก์ํ๋ฅผ ์ฆ์ง์ํจ๋ค. ๋ํ ์ก์ ์๊ฐ ์์ ์์ ๋ด๋ถ ์ํ๋ฅผ ๋ฏธ๋ฆฌ ์ ์ ์๊ธฐ ๋๋ฌธ์ ์ก์ ์์ ์์ ์๊ฐ ๋์จํ๊ฒ ๊ฒฐํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก, ์ธํฐํ์ด์ค๋ ์ด๋ค ๋ ์ฌ๋ฌผ์ด ๋ง์ฃผ์น๋ ๊ฒฝ๊ณ ์ง์ ์์ ์๋ก ์ํธ์์ฉํ ์ ์๊ฒ ์ด์ด์ฃผ๋ ๋ฐฉ๋ฒ์ด๋ ์ฅ์น๋ฅผ ์๋ฏธํ๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ธํฐํ์ด์ค๋ ๋ค์๊ณผ ๊ฐ์ ์ธ ๊ฐ์ง ํน์ง์ ์ง๋๋ค.
- ์ธํฐํ์ด์ค์ ์ฌ์ฉ๋ฒ์ ์ตํ๊ธฐ๋ง ํ๋ฉด ๋ด๋ถ ๊ตฌ์กฐ๋ ๋์ ๋ฐฉ์์ ๋ชฐ๋ผ๋ ์ฝ๊ฒ ๋์์ ์กฐ์ํ๊ฑฐ๋ ์์ฌ๋ฅผ ์ ๋ฌํ ์ ์๋ค.
- ์ธํฐํ์ด์ค ์์ฒด๋ ๋ณ๊ฒฝํ์ง ์๊ณ ๋จ์ํ ๋ด๋ถ ๊ตฌ์ฑ์ด๋ ์๋ ๋ฐฉ์๋ง์ ๋ณ๊ฒฝํ๋ ๊ฒ์ ์ธํฐํ์ด์ค ์ฌ์ฉ์์๊ฒ ์ด๋ค ์ํฅ๋ ๋ฏธ์น์ง ์๋๋ค
- ๋์์ด ๋ณ๊ฒฝ๋๋๋ผ๋ ๋์ผํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๊ธฐ๋ง ํ๋ฉด ์๋ฌด๋ฐ ๋ฌธ์ ์์ด ์ํธ์์ฉ ํ ์ ์๋ค.
์ธํฐํ์ด์ค๋ง ์ ์ง๋๋ค๋ฉด ๊ฐ์ฒด์ ๋ด๋ถ ๊ตฌ์กฐ๋ ์๋ ๋ฐฉ์์ ๋ณ๊ฒฝํ๊ฑฐ๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ก ๋์ฒดํ๋ค๊ณ ํ๋๋ผ๋ ์ธํฐํ์ด์ค ์ฌ์ฉ์์๊ฒ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค.
๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์ ์ํธ์์ฉํ ์ ์๋ ์ ์ผํ ๋ฐฉ๋ฒ์ โ๋ฉ์์ง ์ ์กโ.
๋ฐ๋ผ์ ๊ฐ์ฒด์ ์ธํฐํ์ด์ค โ ๊ฐ์ฒด๊ฐ ์์ ํ ์ ์๋ ๋ฉ์์ง์ ๋ชฉ๋ก์ผ๋ก ๊ตฌ์ฑ๋๋ฉฐ ๊ฐ์ฒด๊ฐ ์ด๋ค ๋ฉ์์ง๋ฅผ ์์ ํ ์ ์๋์ง๊ฐ ๊ฐ์ฒด๊ฐ ์ ๊ณตํ๋ ์ธํฐํ์ด์ค์ ๋ชจ์์ ๋น๋๋ค.
๋งท ์์ด์คํ ๋(Matt Weisfeld)๋ ๊ฐ์ฒด์งํฅ์ ์ธ ์ฌ๊ณ ๋ฐฉ์์ ์ดํดํ๊ธฐ ์ํด์๋ ๋ค์์ ์ธ ๊ฐ์ง ์์น์ด ์ค์ํ๋ค๊ณ ์ฃผ์ฅํ๋ค. ์ด๊ฒ๋ค์ ๋ชจ๋ ๊ฐ์ฒด์ ์ธํฐํ์ด์ค์ ๊ด๋ จ๋ ๊ฒ์ด๋ค.
- ์ข ๋ ์ถ์์ ์ธ ์ธํฐํ์ด์ค
- ์์ด ๋ชจ์ ์ฅ์์๊ฒ โ๋ชฉ๊ฒฉํ๋ ์ฅ๋ฉด์ ๋ ์ฌ๋ ค๋ผโ, โ๋ ์ค๋ฅด๋ ๊ธฐ์ต์ ์๊ฐ ์์๋๋ก ์ฌ๊ตฌ์ฑํ๋ผโ, โ๋ง๋ก ๊ฐ๊ฒฐํ๊ฒ ํํํ๋ผโ์ ๊ฐ์ ์ง๋์น๊ฒ ์์ธํ ์์ค์ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ๊ฒ์ ๊ฐ์ฒด์ ์์จ์ฑ์ ์ ํดํ๋ค.
- ๋์ โ์ฆ์ธํ๋ผโ ๋ผ๋ ์ข ๋ ์ถ์์ ์ธ ์์ค์ ๋ฉ์์ง๋ฅผ ์์ ํ ์ ์๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ฉด ์์ ์์ ์์จ์ฑ์ ๋ณด์ฅํ ์ ์๋ค. ๋ฐ๋ผ์ ๊ตฌ์ฒด์ ์ธ ์ธํฐํ์ด์ค (X) ์ถ์์ ์ธ ์ธํฐํ์ด์ค (O)
- ์ต์ ์ธํฐํ์ด์ค minimal interface
- ์ธ๋ถ์์ ์ฌ์ฉํ ํ์๊ฐ ์๋ ์ธํฐํ์ด์ค๋ ์ต๋ํ ๋ ธ์ถ ๊ธ์ง
- ์ธํฐํ์ด์ค๋ฅผ ์ต์๋ก ์ ์งํ๋ฉด ๊ฐ์ฒด์ ๋ด๋ถ ๋์์ ๋ํด ๊ฐ๋ฅํ ํ ์ ์ ์ ๋ณด๋ง ์ธ๋ถ์ ๋ ธ์ถํ ์ ์๋ค. ๋ฐ๋ผ์ ๊ฐ์ฒด์ ๋ด๋ถ๋ฅผ ์์ ํ๋๋ผ๋ ์ธ๋ถ์ ๋ฏธ์น๋ ์ํฅ์ ์ต์ํํ ์ ์๋ค.
- ์ธํฐํ์ด์ค์ ๊ตฌํ ๊ฐ์ ์ฐจ์ด๊ฐ ์๋ค๋ ์ ์ ์ธ์
๊ฐ์ฒด์งํฅ์ ์ธ๊ณ์์ ๋ด๋ถ ๊ตฌ์กฐ์ ์๋ ๋ฐฉ์์ ๊ฐ๋ฆฌํค๋ ๊ณ ์ ์ ์ฉ์ด๋ ๊ตฌํ (implementation) ์ด๋ค. ๊ฐ์ฒด๋ฅผ ๊ตฌ์ฑํ์ง๋ง ๊ณต์ฉ ์ธํฐํ์ด์ค์ ํฌํจ๋์ง ์๋ ๋ชจ๋ ๊ฒ์ด ๊ตฌํ์ ํฌํจ๋๋ค.
๊ฐ์ฒด ์ค๊ณ์ ํต์ฌ์ ๊ฐ์ฒด๋ฅผ ๋ ๊ฐ์ ๋ถ๋ฆฌ๋ ์์๋ก ๋ถํ ํด ์ค๊ณํ๋ ๊ฒ์ด๋ค. ๊ทธ๊ฒ์ ๋ฐ๋ก ์ธ๋ถ์ ๊ณต๊ฐ๋๋ ์ธํฐํ์ด์ค์ ๋ด๋ถ์ ๊ฐ์ถฐ์ง๋ ๊ตฌํ์ด๋ค.
์ฑ ์์ด ์์จ์ ์ผ์๋ก ์ ์ ํ๊ฒ โ์ถ์ํโ๋๋ฉฐ, โ์์ง๋โ๊ฐ ๋์์ง๊ณ , โ๊ฒฐํฉ๋โ๊ฐ ๋ฎ์์ง๋ฉฐ, โ์บก์ํโ๊ฐ ์ฆ์ง๋๊ณ , โ์ธํฐํ์ด์ค์ ๊ตฌํ์ด ๋ช ํํ๊ฒ ๋ถ๋ฆฌโ๋๋ฉฐ, ์ค๊ณ์ โ์ ์ฐ์ฑโ๊ณผ โ์ฌ์ฌ์ฉ์ฑโ์ด ํฅ์๋๋ค. ์ฒ์์๋ ์ด๋ฐ ์ฉ์ด๋ค์ด ๋ฏ์ค๊ณ ์ดํดํ๊ธฐ๋ ์ด๋ ต๊ฒ ์ง๋ง ์ด๋ฐ ํน์ฑ๋ค์ด ๋ชจ์ฌ ๊ฐ์ฒด์งํฅ์ ๋ค๋ฅธ ํจ๋ฌ๋ค์๋ณด๋ค ์ฐ์ํ๊ฒ ๋ง๋ ๋ค๋ ์ฌ์ค์ ์ดํดํ๋ ๊ฒ์ด ๋งค์ฐ ์ค์ํ๋ค.
๊ฐ์ฒด์งํฅ์ ๊ฐ๋ ฅํจ์ ๋๋ฆฌ๊ธฐ ์ํ ์ถ๋ฐ์ ์ ์ฑ ์์ ์์จ์ ์ผ๋ก ๋ง๋๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ์ฌ๋ฌ๋ถ์ด ์ ํํ๋ ๋ฉ์์ง์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค.
์ํํธ์จ์ด ๋ถ์ผ์์ ์์ธ๊ฐ ์๋ ์ ์ผํ ๊ท์น์ ์๊ตฌ์ฌํญ์ด ํญ์ ๋ณ๊ฒฝ๋๋ค๋ ๊ฒ์ด๋ค. ๊ฐ๋ฐ์์ ์ถ์ด ๊ณ ๋จํ๋ฉด์ ํฅ๋ฏธ๋ก์ด ์ด์ ๋ ์๊ตฌ์ฌํญ์ด ์์ธก ๋ถ๊ฐ๋ฅํ๊ฒ ๋ณ๊ฒฝ๋๊ธฐ ๋๋ฌธ์ด๋ค. ํ๋ฅญํ ์ค๊ณ์๋ ์ฌ์ฉ์๊ฐ ๋ง์กฑํ ์ ์๋ ํ๋ฅญํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋์์ ๋ด์ผ ๋ณ๊ฒฝ๋ ์ง๋ ๋ชจ๋ฅด๋ ์๊ตฌ์ฌํญ๋ ์์ฉํ ์ ์๋ ์ฝ๋๋ฅผ ์ฐฝ์กฐํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฏธ๋์ ๋๋นํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๋ณ๊ฒฝ์ ์์ธกํ๋ ๊ฒ์ด ์๋๋ผ ๋ณ๊ฒฝ์ ์์ฉํ ์ ์๋ ์ ํ์ ์ฌ์ง๋ฅผ ์ค๊ณ์ ๋ง๋ จํด ๋๋ ๊ฒ์ด๋ค. ํ๋ฅญํ ์ค๊ณ์๋ ๋ฏธ๋์ ๊ตฌ์ฒด์ ์ผ๋ก ์ด๋ค ๋ณ๊ฒฝ์ด ๋ฐ์ํ ๊ฒ์ธ์ง๋ฅผ ์์ธกํ๋ ๊ฒ X ๋จ์ง ์ธ์ ๊ฐ๋ ๋ณ๊ฒฝ์ด ๋ฐ์ํ ๊ฒ์ด๋ฉฐ ์์ง๊น์ง๋ ๊ทธ๊ฒ์ด ๋ฌด์์ธ์ง ๋ชจ๋ฅธ๋ค๋ ์ฌ์ค์ ๊ฒธํํ๊ฒ ๋ฐ์๋ค์ธ๋ค.
์ข์ ์ค๊ณ๋ ๋์ค์๋ผ๋ ๋ณ๊ฒฝํ ์ ์๋ ์ฌ์ง๋ฅผ ๋จ๊ฒจ ๋๋ ์ค๊ณ๋ค. ์ค๊ณ๋ฅผ ํ๋ ๋ชฉ์ ์ ๋์ค์ ์ค๊ณํ๋ ๊ฒ์ ํ์ฉํ๋ ๊ฒ์ด๋ฉฐ, ์ค๊ณ์ ์ผ์ฐจ์ ์ธ ๋ชฉํ๋ ๋ณ๊ฒฝ์ ์์๋๋ ๋น์ฉ์ ๋ฎ์ถ๋ ๊ฒ์ด๋ค.
์ด๊ฒ์ด ๊ฐ์ฒด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฑ ์๊ณผ ์ญํ ์ ์๋ณํ๊ณ , ๋ฉ์์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ฒด๋ค์ ํ๋ ฅ ๊ด๊ณ๋ฅผ ๊ตฌ์ถํ๋ ์ด์ ๋ค.
๊ธฐ๋ฅ์ ์ฌ์ฉ์๊ฐ ์์ ์ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํด ์ฌ์ฉํ ์ ์๋ ์์คํ ์ ์๋น์ค๋ค.
๊ตฌ์กฐ๋ ์์คํ ์ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํ ๊ธฐ๋ฐ์ผ๋ก, ๊ธฐ๋ฅ ๋ณ๊ฒฝ์ ์์ฉํ ์ ์๋๋ก ์์ ์ ์ด์ด์ผ ํ๋ค.
- ๊ตฌ์กฐ๋ ์ฌ์ฉ์๋ ์ดํด ๊ด๊ณ์๋ค์ด ๋๋ฉ์ธ(domain)์ ๊ดํด ์๊ฐํ๋ ๊ฐ๋ ๊ณผ ๊ฐ๋ ๋ค ๊ฐ์ ๊ด๊ณ๋ก ํํํ๋ค.
- ๊ธฐ๋ฅ์ ์ฌ์ฉ์์ ๋ชฉํ๋ฅผ ๋ง์กฑ์ํค๊ธฐ ์ํด ์ฑ ์์ ์ํํ๋ ์์คํ ์ ํ์๋ก ํํํ๋ค.
์ ์ค์ผ์ด์ค ๋ชจ๋ธ๋ง - ๊ธฐ๋ฅ์ ์์งํ๊ณ ํํํ๊ธฐ ์ํ ๊ธฐ๋ฒ
๋๋ฉ์ธ ๋ชจ๋ธ๋ง - ๊ตฌ์กฐ๋ฅผ ์์งํ๊ณ ํํํ๊ธฐ ์ํ ๊ธฐ๋ฒ
๋ชจ๋ ์ํํธ์จ์ด๋ ์ฌ์ฉ์์ ํ์์ฑ์ ์ถฉ์กฑ์ํค๊ธฐ ์ํด ์กด์ฌ. ์ฌ์ฉ์๋ ์์ ์ด ๊ด์ฌ์ ๊ฐ์ง๊ณ ์๋ ํน์ ํ ๋ถ์ผ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉ. ์ด์ฒ๋ผ ์ฌ์ฉ์๊ฐ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ๋ ๋์ ๋ถ์ผ๋ฅผ ๋๋ฉ์ธ์ด๋ผ๊ณ ํ๋ค.
๋๋ฉ์ธ ๋ชจ๋ธ โ ์ฌ์ฉ์๊ฐ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ๋ ๋์ ์์ญ์ ๊ดํ ์ง์์ ์ ํ์ ์ผ๋ก ๋จ์ํํ๊ณ ์์์ ์ผ๋ก ๊ตฌ์กฐํํ ํํ๋ค.
๋๋ฉ์ธ ๋ชจ๋ธ์ ์ดํด๊ด๊ณ์๋ค์ด ๋ฐ๋ผ๋ณด๋ ๋ฉํ ๋ชจ๋ธ (Mental Model) ์ด๋ค. ๋ฉํ ๋ชจ๋ธ์ด๋ ์ฌ๋๋ค์ด ์๊ธฐ ์์ , ๋ค๋ฅธ ์ฌ๋, ํ๊ฒฝ, ์์ ์ด ์ํธ์์ฉํ๋ ์ฌ๋ฌผ๋ค์ ๋ํด ๊ฐ๋ ๋ชจํ์ด๋ค. ์ฌ๋๋ค์ ์ธ์์ ์กด์ฌํ๋ ํ์์ ์ดํดํ๊ณ ํ์์ ๋ฐ์ํ๊ธฐ ์ํด ์์ ์ ๋ง์ ์์ ๋ฉํ ๋ชจ๋ธ์ ๊ตฌ์ถํ๋ค.
๋๋๋ ๋ ธ๋จผ(Donald Norman)์ ์ ํ์ ์ค๊ณํ ๋ ์ ํ์ ๊ดํ ๋ชจ๋ ๊ฒ์ด ์ฌ์ฉ์๋ค์ด ์ ํ์ ๋ํด ๊ฐ์ง๊ณ ์๋ ๋ฉํ ๋ชจ๋ธ๊ณผ ์ ํํ๊ฒ ์ผ์นํด์ผ ํ๋ค๊ณ ์ฃผ์ฅํ๋ค.
์ต์ข ์ ํ์ ์ฌ์ฉ์์ ๊ด์ ์ ๋ฐ์ํด์ผ ํ๋ค.
์ต์ข ์ฝ๋๋ ์ฌ์ฉ์๊ฐ ๋๋ฉ์ธ์ ๋ฐ๋ผ๋ณด๋ ๊ด์ ์ ๋ฐ์ํด์ผ ํ๋ค. ์ด๊ฒ์ ๊ณง ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋๋ฉ์ธ ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ์ค๊ณ๋ผ์ผ ํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ๋๋ฉ์ธ ๋ชจ๋ธ์ด๋ ์ฌ์ฉ์๋ค์ด ๋๋ฉ์ธ์ ๋ฐ๋ผ๋ณด๋ ๊ด์ ์ด๋ฉฐ, ์ค๊ณ์๊ฐ ์์คํ ์ ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ผ๋ณด๋ ๊ด์ ์ธ ๋์์ ์ํํธ์จ์ด ์์ ๊ตฌํ๋ ์ฝ๋์ ๋ชจ์ต ๊ทธ ์์ฒด์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ฌ์ฉ์์ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํด ์ฌ์ฉ์์ ์์คํ ๊ฐ์ ์ด๋ค์ง๋ ์ํธ์์ฉ์ ํ๋ฆ์ ํ ์คํธ๋ก ์ ๋ฆฌํ ๊ฒ.
- ์ ์ค์ผ์ด์ค๋ ์ฌ์ฉ์์ ์์คํ ๊ฐ์ ์ํธ์์ฉ์ ๋ณด์ฌ์ฃผ๋ โํ ์คํธโ๋ค.
- ์ ์ค์ผ์ด์ค๋ ํ๋์ ์๋๋ฆฌ์ค๊ฐ ์๋๋ผ ์ฌ๋ฌ ์๋๋ฆฌ์ค๋ค์ ์งํฉ์ด๋ค.
- ์ ์ค์ผ์ด์ค๋ ๋น์ํ ํผ์ฒ(feature) ๋ชฉ๋ก๊ณผ ๋ค๋ฅด๋ค.
- ํผ์ฒ๋ ์์คํ ์ด ์ํํ์ผ ํ๋ ๊ธฐ๋ฅ์ ๋ชฉ๋ก์ ๋จ์ํ๊ฒ ๋์ดํ ๊ฒ์ด๋ค. ์์ ๋ก, ํผ์ฒ๋ โ์์คํ ์ ์ ๊ธฐ์๊ธ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ค๋คโ์ โ์์คํ ์ ๋น์ผ์ด๋ ํ์ฌ ์ผ์์ ์ด์๋ฅผ ๊ณ์ฐํ๋คโ์ด๋ค. ํผ์ฒ์ ๋จ์ ์ ์ด ๋ ํผ์ฒ๋ฅผ ์๋ก ์ฐ๊ด์ด ์๋ ๋ ๋ฆฝ์ ์ธ ๊ธฐ๋ฅ์ผ๋ก ๋ณด์ด๊ฒ๋ ๋ง๋ ๋ค๋ ์ ์ด๋ค. ๋ ํผ์ฒ๋ฅผ โ์ค๋ ํด์ง ์ด์์ก์ ๊ณ์ฐํ๋คโ๋ผ๋ ์ ์ค์ผ์ด์ค๋ก ๋ฌถ๊ณ ์ฌ์ฉ์์์ ์ํธ์์ฉ ํ๋ฆ ์์์ ๋ ํผ์ฒ๋ฅผ ํฌํจํ๋ ์ด์ผ๊ธฐ๋ฅผ ์ ๊ณตํจ์ผ๋ก์จ ์์คํ ์ ๊ธฐ๋ฅ์ ๋ํด ์์ฌ์ํตํ ์ ์๋ ๋ฌธ๋งฅ์ ์ป์ ์ ์๋ค.
- ์ ์ค์ผ์ด์ค์ ๊ฐ์ ์ ์ ์ค์ผ์ด์ค๊ฐ ๋จ์ํ ๊ธฐ๋ฅ์ ๋์ดํ๋ ๊ฒ์ด ์๋๋ผ ์ด์ผ๊ธฐ๋ฅผ ํตํด ์ฐ๊ด๋ ๊ธฐ๋ฅ๋ค์ ํจ๊ป ๋ฌถ์ ์ ์๋ค๋ ์ ์ด๋ค.
- ์ ์ค์ผ์ด์ค๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ๊ด๋ จ๋ ์ธ๋ถ ์ ๋ณด๋ฅผ ํฌํจํ์ง ๋ง์์ผ ํ๋ค.
- ์ ์ค์ผ์ด์ค๋ ์์ฃผ ๋ณ๊ฒฝ๋๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค ์์๋ ๋ฐฐ์ ํ๊ณ ์ฌ์ฉ์ ๊ด์ ์์ ์์คํ ์ ํ์์ ์ด์ ์ ๋ง์ถ๋ค. ์ด์ฒ๋ผ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋ฒ ์ฌํ ์ ์ค์ผ์ด์ค ํ์์ essential use case ๋ณธ์ง์ ์ธ ์ ์ค์ผ์ด์ค๋ผ๊ณ ํ๋ค.
- ์ ์ค์ผ์ด์ค๋ ๋ด๋ถ ์ค๊ณ์ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ํฌํจํ์ง ์๋๋ค.
- ์ ์ค์ผ์ด์ค์ ๋ชฉ์ ์ ์ฐ๊ด๋ ์์คํ ์ ๊ธฐ๋ฅ์ ์ด์ผ๊ธฐ ํ์์ผ๋ก ๋ชจ์ผ๋ ๊ฒ์ด์ง, ๋ด๋ถ ์ค๊ณ๋ฅผ ์ค๋ช ํ๋ ๊ฒ์ด ์๋๋ค.
- ์ ์ค์ผ์ด์ค์์ ๊ฐ์ฒด ์ค๊ณ๋ก์ ์ ํ์ ๊ณตํ์ ์ธ ๊ท์น๊ณผ ์์น์ ๊ธฐ๋ฐ์ผ๋ก ํ ๋ณํ ์์ ์ด ์๋๋ผ ๊ฒฝํ๊ณผ ์์๊ณผ ์์ฌ์ํต์ ๊ธฐ๋ฐ์ผ๋ก ํ ์ฐฝ์กฐ ์์ ์ด๋ค.
์ ์ค์ผ์ด์ค๊ฐ ๋จ์ง ์ฌ์ฉ์๊ฐ ๋ฐ๋ผ๋ณด๋ ์์คํ ์ ์ธ๋ถ ๊ด์ ๋ง์ ํํํ๋ค๋ ์ ์ ์ฃผ๋ชฉํ๋ผ.
- ํ๋ ฅ์ ์ถ๋ฐ์ ์ฅ์ํ๋ ์ฒซ ๋ฒ์งธ ๋ฉ์์ง๋ ์์คํ ์ ๊ธฐ๋ฅ์ ์์คํ ์ ์ฑ ์์ผ๋ก ๋ฐ๊พผ ํ ์ป์ด์ง๋ค.
- ์์คํ ์ ํ ๋น๋ ์ปค๋ค๋ ์ฑ ์์ ์ด์ ์์คํ ์์ ์์ ๊ท๋ชจ์ ๊ฐ์ฒด๋ค์ด ์ํํด์ผ ํ๋ ๋ ์์ ๊ท๋ชจ์ ์ฑ ์์ผ๋ก ์ธ๋ถํ๋๋ค.
- ์ด๋ค ๊ฐ์ฒด๋ฅผ ์ ํํ ๊ฒ์ธ๊ฐ? โ ๋๋ฉ์ธ ๋ชจ๋ธ
- ๋๋ฉ์ธ ๋ชจ๋ธ์ ํฌํจ๋ ๊ฐ๋ ์ ์์ ํ๋ ์ํํธ์จ์ด ๊ฐ์ฒด๋ฅผ ์ ํํด์ผ ํ๋ค.
- ํ๋ ฅ์ ์์ฑํ๋ ๋ฐ ํ์ํ ๋ฉ์์ง๋ฅผ ์๋ณํ๋ฉด์ ๊ฐ์ฒด๋ค์๊ฒ ์ฑ ์์ ํ๋นํด ๋๊ฐ๋ค.
- ๋ง์ง๋ง์ผ๋ก ํ๋ ฅ์ ์ฐธ์ฌํ๋ ๊ฐ์ฒด๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ํด๋์ค๋ฅผ ์ถ๊ฐํ๊ณ ์์๊ณผ ํจ๊ป ๋ฉ์๋๋ฅผ ๊ตฌํํ๋ฉด ์์คํ ์ ๊ธฐ๋ฅ์ด ์์ฑ๋ ๊ฒ์ด๋ค.
๊ฐ์ฒด ์ค๊ณ๋ ๊ฐ๋ ๋ค์๊ณผ ๊ฐ์ด ํํ๋๊ธฐ๋ ํ๋ค.
์๊ตฌ์ฌํญ๋ค์ ์๋ณํ๊ณ ๋๋ฉ์ธ ๋ชจ๋ธ์ ์์ฑํ ํ, ์ํํธ์จ์ด ํด๋์ค์ ๋งค์๋๋ค์ ์ถ๊ฐํ๊ณ , ์๊ตฌ์ฌํญ์ ์ถฉ์กฑ์ํค๊ธฐ ์ํด ๊ฐ์ฒด๋ค ๊ฐ์ ๋ฉ์์ง ์ ์ก์ ์ ์ํ๋ผ.
์ฑ ์-์ฃผ๋ ์ค๊ณ๋ ์ ์ค์ผ์ด์ค๋ก๋ถํฐ ์ฒซ ๋ฒ์งธ ๋ฉ์์ง์ ์ฌ์ฉ์๊ฐ ๋ฌ์ฑํ๋ ค๋ ๋ชฉํ๋ฅผ, ๋๋ฉ์ธ ๋ชจ๋ธ๋ก๋ถํฐ ๊ธฐ๋ฅ์ ์์ฉํ ์ ์๋ ์์ ์ ์ธ ๊ตฌ์กฐ๋ฅผ ์ ๊ณต๋ฐ์ ์ค์ ๋ก ๋์ํ๋ ๊ฐ์ฒด๋ค์ ํ๋ ฅ ๊ณต๋์ฒด๋ฅผ ์ฐฝ์กฐํ๋ค.
๋๋ฉ์ธ ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ฒด ๊ตฌ์กฐ๋ฅผ ์ค๊ณํ๋ ์ด์ ๋ ๋๋ฉ์ธ ๋ชจ๋ธ์ด ์์ ์ ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๋๋ฉ์ธ ๋ชจ๋ธ์ด ์์ ์ ์ธ ์ด์ : ๋๋ฉ์ธ ๋ชจ๋ธ์ ๊ตฌ์ฑํ๋ ์์
- ๋๋ฉ์ธ ๋ชจ๋ธ์ ๊ตฌ์ฑํ๋ ๊ฐ๋
์ ๋น์ฆ๋์ค๊ฐ ์์ด์ง๊ฑฐ๋ ์์ ํ ๊ฐํธ๋์ง ์๋ ํ ์์ ์ ์ผ๋ก ์ ์ง๋๋ค.
- ์ ๊ธฐ์๊ธ ๋๋ฉ์ธ์์ ์ ๊ธฐ์๊ธ, ๊ณ์ข, ์ด์์จ, ์ด์๋ ๊ฐ๋ ์ ์ ๊ธฐ์๊ธ์ด๋ ๊ธ์ต์ํ์ด ์์ด์ง๊ฑฐ๋ ์์ ํ ๊ฐํธ๋์ง ์๋ ํ ์์ ์ ์ผ๋ก ์ ์ง๋๋ ๊ฐ๋ ์ด๋ค.
- ๋๋ฉ์ธ ๋ชจ๋ธ์ ๊ตฌ์ฑํ๋ ๊ฐ๋
๊ฐ์ ๊ด๊ณ๋ ๋น์ฆ๋์ค ๊ท์น์ ๊ธฐ๋ฐ์ผ๋ก ํ๊ธฐ ๋๋ฌธ์ ๋น์ฆ๋์ค ์ ์ฑ
์ด ํฌ๊ฒ ๋ณ๊ฒฝ๋์ง ์๋ ํ ์์ ์ ์ผ๋ก ์ ์ง๋๋ค.
- ๊ณ์ข์ ์ด์๊ฐ์ 0..1๊ด๊ณ๋ ํต์ฌ์ ์ธ ๋น์ฆ๋์ค ๊ท์น์ด ๋ณ๊ฒฝ๋์ง ์๋ ํ ๋์ผํ๊ฒ ์ ์ง๋๋ค. (์ด์๋ ์ ๊ธฐ์๊ธ์ด ๋ง๊ธฐ๋๊ฑฐ๋ ์ค๋ ํด์งํ๋ ๊ฒฝ์ฐ์ ํํด์ ๋จ ํ๋ฒ๋ง ์ง๊ธ๋๋ค)
๋น์ฆ๋์ค ์ ์ฑ ์ด๋ ๊ท์น์ด ํฌ๊ฒ ๋ณ๊ฒฝ๋์ง ์๋ ํ ์์คํ ์ ๊ธฐ๋ฅ์ด ๋ณ๊ฒฝ๋๋๋ผ๋ ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ๋ ์ผ์ ํ๊ฒ ์ ์ง๋๋ค. ๊ธฐ๋ฅ์ ์ธ ์๊ตฌ์ฌํญ์ด ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ ์ฑ ์๊ณผ ๊ฐ์ฒด ๊ฐ์ ๋์ ๊ด๊ณ๋ง ์์ ๋ ๋ฟ์ด๋ค. ์ด๋ ๋ณ๊ฒฝ์ ๋ํ ํ๊ธํจ๊ณผ๋ฅผ ์ต์ํํ๊ณ ์๊ตฌ์ฌํญ ๋ณ๊ฒฝ์ ์ ์ฐํ๊ฒ ๋์ํ ์ ์๋ ์์คํ ์ ๊ตฌ์ถํ ์ ์๊ฒ ํ๋ค.
๊ฐ์ฒด์งํฅ์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ ๋๋ฉ์ธ์ ๋ชจ๋ธ๋งํ๊ธฐ ์ํ ๊ธฐ๋ฒ๊ณผ ๋๋ฉ์ธ์ ํ๋ก๊ทธ๋๋ฐํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ธฐ๋ฒ์ด ๋์ผํ๋ค๋ ์ ์ด๋ค. ๋ฐ๋ผ์ ๋๋ฉ์ธ ๋ชจ๋ธ๋ง์์ ์ฌ์ฉํ ๊ฐ์ฒด์ ๊ฐ๋ ์ ํ๋ก๊ทธ๋๋ฐ ์ค๊ณ์์์ ๊ฐ์ฒด์ ํด๋์ค๋ก ๋งค๋๋ฝ๊ฒ ๋ณํํ ์ ์๋ค.
๋งํดํ์ธ๋ฌ๋ ๊ฐ์ฒด์งํฅ ์ค๊ณ ์์ ์กด์ฌํ๋ ์ธ ๊ฐ์ง ์ํธ ์ฐ๊ด๋ ๊ด์ ์ ๊ดํด ์ค๋ช ํ๋ค.
- ๊ฐ๋
๊ด์ Conceptual Perspective
- ์์ ์ค๊ณ๋ ๋๋ฉ์ธ ์์ ์กด์ฌํ๋ ๊ฐ๋ ๊ณผ ๊ฐ๋ ๋ค ์ฌ์ด์ ๊ด๊ณ๋ฅผ ํํํ๋ค.
- ๋๋ฉ์ธ์ด๋ ์ฌ์ฉ์๋ค์ด ๊ด์ฌ์ ๊ฐ์ง๊ณ ์๋ ํน์ ๋ถ์ผ๋ ์ฃผ์ ๋ฅผ ๋งํ๋ฉฐ ์ํํธ์จ์ด๋ ๋๋ฉ์ธ์ ์กด์ฌํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฐ๋ฐ๋๋ค.
- ์ด ๊ด์ ์ ์ฌ์ฉ์๊ฐ ๋๋ฉ์ธ์ ๋ฐ๋ผ๋ณด๋ ๊ด์ ์ ๋ฐ์ํ๋ค.
- ๋ฐ๋ผ์ ์ค์ ๋๋ฉ์ธ์ ๊ท์น๊ณผ ์ ์ฝ์ ์ต๋ํ ์ ์ฌํ๊ฒ ๋ฐ์ํ๋ ๊ฒ์ด ํต์ฌ์ด๋ค.
- ๋ช
์ธ ๊ด์ Specification Perspective
- ์ฌ์ฉ์์ ์์ญ์ธ ๋๋ฉ์ธ์ ๋ฒ์ด๋ ๊ฐ๋ฐ์์ ์์ญ์ธ ์ํํธ์จ์ด๋ก ์ด์ ์ด ์ฎ๊ฒจ์ง๋ค.
- ๋๋ฉ์ธ์ ๊ฐ๋ ์ด ์๋๋ผ ์ค์ ๋ก ์ํํธ์จ์ด ์์์ ์ด์ ์จ์ฌ๋ ๊ฐ์ฒด๋ค์ ์ฑ ์์ ์ด์ ์ ๋ง์ถ๊ฒ ๋๋ค.
- ์ฆ, ๊ฐ์ฒด์ ์ธํฐํ์ด์ค๋ฅผ ๋ฐ๋ผ๋ณด๊ฒ ๋๋ค.
- ์ํ๊น๊ฒ๋ ๋๋ถ๋ถ์ ๊ฐ์ฒด์งํฅ ์ธ์ด๊ฐ ์ธํฐํ์ด์ค์ ๊ตฌํ์ ํด๋์ค ์์ผ๋ก ์์ด ๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ ๋ง์ ์ค๊ณ์๋ค์ด ์ธํฐํ์ด์ค์ ๊ตฌํ์ ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ผ๋ง๋ ์ค์ํ์ง๋ฅผ ์์ด๋ฒ๋ฆฌ๊ณค ํ๋ค.
- ๊ฐ์ฒด์งํฅ ์ค๊ณ ๋ถ์ผ์ ์ค๋๋ ๊ฒฉ์ธ: โ๊ตฌํ์ด ์๋๋ผ ์ธํฐํ์ด์ค์ ๋ํด ํ๋ก๊ทธ๋๋ฐํ๋ผ.โ
- ๊ตฌํ ๊ด์ Implementation Perspective
- ๊ฐ์ฒด๋ค์ด ์ฑ ์์ ์ํํ๋ ๋ฐ ํ์ํ ๋์ํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด๋ค.
- ๋ฐ๋ผ์ ํ๋ก๊ทธ๋๋จธ๋ ๊ฐ์ฒด์ ์ฑ ์์ โ์ด๋ป๊ฒโ ์ํํ ๊ฒ์ธ๊ฐ์ ์ด์ ์ ๋ง์ถ๋ฉฐ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๋ฐ ํ์ํ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ํด๋์ค์ ์ถ๊ฐํ๋ค.
- ์ฒซ ๋ฒ์งธ ๋ชฉํ๋ ๋๋ฉ์ธ ๋ชจ๋ธ์์ ์์ํด์ ์ต์ข ์ฝ๋๊น์ง์ ๊ตฌํ ๊ณผ์ ์ ๊ฐ๋ตํ๊ฒ๋๋ง ์ค๋ช .
- ๋ ๋ฒ์งธ ๋ชฉํ๋ ๊ตฌํ ํด๋์ค๋ฅผ ๊ฐ๋ ๊ด์ , ๋ช ์ธ ๊ด์ , ๊ตฌํ ๊ด์ ์์ ๋ฐ๋ผ๋ณธ๋ค๋ ๊ฒ์ด ๋ฌด์์ ์๋ฏธํ๋์ง ์ค๋ช .
์ปคํผ ์ ๋ฌธ์ ์์๋ ๋ฉ๋ดํ์ด ์กด์ฌํ๋ค.
- ๋ฉ๋ดํ
- ์๋ฉ๋ฆฌ์นด๋ ธ 1500์
- ์นดํธ์น๋ ธ 2000์
- ์นด๋ผ๋ฉ ๋งํค์๋ 2500์
- ์์คํ๋ ์ 2500์
๊ฐ์ฒด์งํฅ์ ๊ด์ ์์ ๋ฉ๋ดํ์ ํ๋์ ๊ฐ์ฒด.
๋ฉ๋ดํ์ ๋ค ๊ฐ์ ๋ฉ๋ด ํญ๋ชฉ์ผ๋ก ๊ตฌ์ฑ โ ๋ฉ๋ด ํญ๋ชฉ๋ค ์ญ์ ๊ฐ์ฒด๋ก ๋ณผ ์ ์๋ค.
๋ฐ๋ผ์, ๋ฉ๋ดํ์ ๋ค ๊ฐ์ ๋ฉ๋ด ํญ๋ชฉ ๊ฐ์ฒด๋ค์ ํฌํจํ๋ ๊ฐ์ฒด๋ผ๊ณ ๋ณผ ์ ์๋ค.
์๋์ ๋ฉ๋ดํ์ ๋ณด๊ณ ๋ฐ๋ฆฌ์คํ์๊ฒ ์ฃผ๋ฌธํ๋ค.
๊ฐ์ฒด์ ๊ด์ ์์ ๋ณด๋ฉด ์๋, ๋ฐ๋ฆฌ์คํ ์ญ์ ๊ฐ์ฒด๋ค์ด๋ค.
์ข ํฉํด ๋ณด๋ฉด ๊ฐ์ฒด์งํฅ์ ๊ด์ ์์ ์ปคํผ ์ ๋ฌธ์ ์ด๋ผ๋ ๋๋ฉ์ธ์ ์๋ ๊ฐ์ฒด, ๋ฉ๋ด ํญ๋ชฉ ๊ฐ์ฒด, ๋ฉ๋ดํ ๊ฐ์ฒด, ๋ฐ๋ฆฌ์คํ ๊ฐ์ฒด, ์ปคํผ ๊ฐ์ฒด๋ก ๊ตฌ์ฑ๋ ์์ ์ธ์์ด๋ค.
์ํ์ ๋ฌด๊ดํ๊ฒ ๋์ผํ๊ฒ ํ๋ํ ์ ์๋ ๊ฐ์ฒด๋ค์ ๋์ผํ ํ์ ์ ์ธ์คํด์ค๋ก ๋ถ๋ฅํ ์ ์๋ค.
์๋ ๊ฐ์ฒด๋ โ์๋ ํ์ โ์ ์ธ์คํด์ค๋ก ๋ณผ ์ ์๋ค. ๋ฐ๋ฆฌ์คํ ๊ฐ์ฒด๋ โ๋ฐ๋ฆฌ์คํ ํ์ โ ์ธ์คํด์ค๋ก ๋ณผ ์ ์๋ค. ์๋ฉ๋ฆฌ์นด๋ ธ ์ปคํผ, ์์คํ๋ ์ ์ปคํผ, ์นดํธ์น๋ ธ ์ปคํผ๋ ๋ชจ๋ โ์ปคํผ ํ์ โ์ ์ธ์คํด์ค๋ก ๋ณผ ์ ์๋ค. ๋ฉ๋ดํ ๊ฐ์ฒด๋ โ๋ฉ๋ดํ ํ์ โ์ ์ธ์คํด์ค๋ค. ๋ฉ๋ดํ ๊ฐ์ฒด๋ ์๋ฉ๋ฆฌ์นด๋ ธ, ์์คํ๋ ์, ์นดํธ์น๋ ธ๋ผ๋ ๋ค ๊ฐ์ ๋ฉ๋ด ํญ๋ชฉ ๊ฐ์ฒด๋ฅผ ํฌํจํ ์ ์๋ค. ๋ค ๊ฐ์ ๋ฉ๋ด ํญ๋ชฉ ๊ฐ์ฒด ์ญ์ ๋ชจ๋ ๋์ผํ โ๋ฉ๋ด ํญ๋ชฉ ํ์ โ์ ์ธ์คํด์ค๋ก ๋ชจ๋ธ๋งํ ์ ์๋ค.
์ด์ฒ๋ผ ์ํํธ์จ์ด๊ฐ ๋์์ผ๋ก ํ๋ ์์ญ์ธ ๋๋ฉ์ธ์ ๋จ์ํํด์ ํํํ ๋ชจ๋ธ์ ๋๋ฉ์ธ ๋ชจ๋ธ์ด๋ผ๊ณ ํ๋ค.
๋ง๋ฆ๋ชจ๋ ํฌํจ(containment) ๊ด๊ณ ๋๋ ํฉ์ฑ(composition) ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ ๊ฒ์ผ๋ก, ๋ฉ๋ด ํญ๋ชฉ์ด ๋ฉ๋ดํ์ ํฌํจ๋๋ค๋ ์ฌ์ค์ ํํํ๋ค. ๋ฉ๋ด ํญ๋ชฉ ์ข์ธก ์๋์ ์ซ์๋ ๋ฉ๋ดํ์ ํฌํจ๋๋ ๋ฉ๋ด ํญ๋ชฉ์ ๊ฐ์๋ฅผ ์๋ฏธํ๋ค.
ํ ํ์ ์ ์ธ์คํด์ค๊ฐ ๋ค๋ฅธ ํ์ ์ ์ธ์คํด์ค๋ฅผ ํฌํจํ์ง๋ ์์ง๋ง ์๋ก ์๊ณ ์์ด์ผ ํ ๊ฒฝ์ฐ ์ด๋ฅผ ์ฐ๊ด(association) ๊ด๊ณ๋ผ๊ณ ํ๋ค. ์๋-๋ฉ๋ดํ, ์๋-๋ฐ๋ฆฌ์คํ, ๋ฐ๋ฆฌ์คํ-์ปคํผ.
- ๋ฉ์์ง๋ฅผ ๋จผ์ ์ ํํ๊ณ
- ๊ทธ ํ์ ๋ฉ์์ง๋ฅผ ์์ ํ๊ธฐ์ ์ ์ ํ ๊ฐ์ฒด๋ฅผ ์ ํํด์ผ ํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ๋ฉ์์ง๋ฅผ ์์ ํ ๊ฐ์ฒด๋ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ ์ฑ ์์ ๋งก๊ฒ ๋๊ณ ๊ฐ์ฒด๊ฐ ์์ ํ๋ ๋ฉ์์ง๋ ๊ฐ์ฒด๊ฐ ์ธ๋ถ์ ์ ๊ณตํ๋ ๊ณต์ฉ ์ธํฐํ์ด์ค์ ํฌํจ๋๋ค.
๋ฉ์์ง ์์ ๋ถ์ ํ์ดํ๋ ๋ฉ์์ง์ ๋ด์ ์ ๋ฌ๋ ๋ถ๊ฐ์ ์ธ ์ ๋ณด์ธ ์ธ์๋ฅผ ์๋ฏธํ๋ค. ์ด ๊ฒฝ์ฐ โ์๋ฉ๋ฆฌ์นด๋ ธ๋ฅผ ์ฃผ๋ฌธํ๋ผโ ๋ฉ์์ง๋ ๋์ค์ โ์ปคํผ๋ฅผ ์ฃผ๋ฌธํ๋ผ(์๋ฉ๋ฆฌ์นด๋ ธ)โ์ ๊ฐ์ด ์ธ์๋ฅผ ํฌํจํ๋ ํ์์ผ๋ก ๊ตฌํ๋ ๊ฒ์ด๋ค.
๊ฐ์ฒด๊ฐ ์์ ํ ๋ฉ์์ง๊ฐ ๊ฐ์ฒด์ ์ธํฐํ์ด์ค๋ฅผ ๊ฒฐ์ ํ๋ค. ๊ฐ์ฒด๊ฐ ์ด๋ค ๋ฉ์์ง๋ฅผ ์์ ํ ์ ์๋ค๋ ๊ฒ์ ๊ทธ ๊ฐ์ฒด์ ์ธํฐํ์ด์ค ์์ ๋ฉ์์ง์ ํด๋นํ๋ ์คํผ๋ ์ด์ ์ด ์กด์ฌํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
๊ฐ์ฒด๋ค์ ํฌ๊ดํ๋ ํ์ ์ ์ ์ํ ํ ์๋ณ๋ ์คํผ๋ ์ด์ ์ ํ์ ์ ์ธํฐํ์ด์ค์ ์ถ๊ฐํด์ผ ํ๋ค.
๊ฐ์ฒด์ ํ์ ์ ๊ตฌํํ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ ํด๋์ค๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด๋ค. ์ธํฐํ์ด์ค์ ํฌํจ๋ ์คํผ๋ ์ด์ ์ญ์ ์ธ๋ถ์์ ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ๊ณต์ฉ(public)์ผ๋ก ์ ์ธ๋ผ ์์ด์ผ ํ๋ค.
class Customer {
public void order(String menuName) {}
}
class MenuItem {
}
class Menu {
public MenuItem choose(String name) {}
}
class Barista {
public Coffee makeCoffee(MenuItem menuItem) {}
}
class Coffee {
public Coffee(MenuItem menuItem) {}
}
ํด๋์ค์ ์ธํฐํ์ด์ค๋ฅผ ์๋ณํ์ผ๋ฏ๋ก, ์ด์ ์คํผ๋ ์ด์ ์ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ฉ์๋๋ก ๊ตฌํํ์.
class Customer {
public void order(String menuName, Menu menu, Barista barista) {
MenuItem menuItem = menu.choose(menuName);
Coffee coffee = barista.makeCoffee(menuItem);
...
}
}
Customer
๊ฐ์ฒด๋ ์ด๋ค ๋ฐฉ๋ฒ์ผ๋ก๋ ์์ ๊ณผ ํ๋ ฅํ๋ Menu
๊ฐ์ฒด์ Barista
๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๋ฅผ ์๊ณ ์์ด์ผ ํ๋ค. ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ์ป๋ ๋ค์ํ ๋ฐฉ๋ฒ์ด ์์ง๋ง ์ฌ๊ธฐ์๋ Customer
์ order()
๋ฉ์๋์ ์ธ์๋ก Menu
์ Barista
๊ฐ์ฒด๋ฅผ ์ ๋ฌ๋ฐ๋ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํ๋ค.
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
์ ์์ฑ์ผ๋ก ํฌํจ ์ํจ ๊ฒฐ์ ์ญ์ ํด๋์ค๋ฅผ ๊ตฌํํ๋ ๋์ค์ ๋ด๋ ค์ก๋ค๋ ์ฌ์ค์ ์ฃผ๋ชฉํ๋ผ. ๊ฐ์ฒด์ ์์ฑ์ ๊ฐ์ฒด์ ๋ด๋ถ ๊ตฌํ์ ์ํ๊ธฐ ๋๋ฌธ์ ์บก์ํ๋ผ์ผ ํ๋ค. ๊ฐ์ฒด์ ์์ฑ์ด ์บก์ํ๋๋ค๋ ์ด์ผ๊ธฐ๋ ์ธํฐํ์ด์ค์๋ ๊ฐ์ฒด์ ๋ด๋ถ ์์ฑ์ ๋ํ ์ด๋ค ํํธ๋ ์ ๊ณต๋ผ์๋ ์ ๋๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ด๋ฅผ ์ํ ๊ฐ์ฅ ํผ๋ฅญํ ๋ฐฉ๋ฒ์ ์ธํฐํ์ด์ค๋ฅผ ์ ํ๋ ๋จ๊ณ์์๋ ๊ฐ์ฒด๊ฐ ์ด๋ค ์์ฑ์ ๊ฐ์ง๋์ง, ๋ ๊ทธ ์์ฑ์ด ์ด๋ค ์๋ฃ ๊ตฌ์กฐ๋ก ๊ตฌํ๋๋์ง๋ฅผ ๊ณ ๋ คํ์ง ์๋ ๊ฒ์ด๋ค. ๊ฐ์ฒด์๊ฒ ์ฑ
์์ ํ ๋นํ๊ณ ์ธํฐํ์ด์ค๋ฅผ ๊ฒฐ์ ํ ๋๋ ๊ฐ๊ธ์ ๊ฐ์ฒด ๋ด๋ถ์ ๊ตฌํ์ ๋ํ ์ด๋ค ๊ฐ์ ๋ ํ์ง ๋ง์์ผ ํ๋ค. ๊ฐ์ฒด๊ฐ ์ด๋ค ์ฑ
์์ ์ํํด์ผ ํ๋์ง๋ฅผ ๊ฒฐ์ ํ ํ์์ผ ์ฑ
์์ ์ํํ๋ ๋ฐ ํ์ํ ๊ฐ์ฒด์ ์์ฑ์ ๊ฒฐ์ ํ๋ผ. ์ด๊ฒ์ด ๊ฐ์ฒด์ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ๊ฐ์ฒด์ ๊ณต์ฉ ์ธํฐํ์ด์ค์ ๋
ธ์ถ์ํค์ง ์๊ณ ์ธํฐํ์ด์ค์ ๊ตฌํ์ ๊น๋ํ๊ฒ ๋ถ๋ฆฌํ ์ ์๋ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ์ด๋ค.
class Barista {
public Coffee makeCoffee(MenuItem menuItem) {
Coffee coffee = new Coffee(menuItem);
return coffee;
}
}
class Coffee {
private String name;
private int price;
public Coffee(MenuItem menuItem) {
this.name = menuItem.getName();
this.price = menuItem.cost();
}
}
class MenuItem {
private String name;
private int price;
public MenuItem(String name, int price) {
this.name = name;
this.price = price;
}
public int cost() {
return price;
}
public String getName() {
return name;
}
}
MenuItem
์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ฑํ๋ ์คํผ๋ ์ด์
๋ค์ MenuItem
์ ๊ตฌํํ๋ ๋จ๊ณ์ ์์์ผ ์๋ณํ๋ค๋ ์ ์ ๋์ฌ๊ฒจ๋ณด๊ธฐ ๋ฐ๋๋ค. ์ธํฐํ์ด์ค๋ฅผ ํตํด ์ค์ ๋ก ์ํธ์์ฉ์ ํด๋ณด์ง ์์ ์ฑ ์ธํฐํ์ด์ค์ ๋ชจ์ต์ ์ ํํ๊ฒ ์์ธกํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅ์ ๊ฐ๊น๋ค.
์ค๊ณ๋ฅผ ๊ฐ๋จํ ๋๋ด๊ณ ์ต๋ํ ๋นจ๋ฆฌ ๊ตฌํ์ ๋์ ํ๋ผ. ๋จธ๋ฆฟ์์ ๊ฐ์ฒด์ ํ๋ ฅ ๊ตฌ์กฐ๊ฐ ๋ฒ๋ฉ์ธ๋ค๋ฉด ๊ทธ๋๋ก ์ฝ๋๋ฅผ ๊ตฌํํ๊ธฐ ์์ํ๋ผ. ์ค๊ณ๊ฐ ์ ๋๋ก ๊ทธ๋ ค์ง์ง ์๋๋ค๋ฉด ๊ณ ๋ฏผํ์ง ๋ง๊ณ ์ค์ ๋ก ์ฝ๋๋ฅผ ์์ฑํด๊ฐ๋ฉด์ ํ๋ ฅ์ ์ ์ฒด์ ์ธ ๋ฐ๊ทธ๋ฆผ์ ๊ทธ๋ ค๋ณด๋ผ. ํ ์คํธ-์ฃผ๋ ์ค๊ณ๋ก ์ฝ๋๋ฅผ ๊ตฌํํ๋ ์ฌ๋๋ค์ด ํ๋ ์์ ์ด ๋ฐ๋ก ์ด๊ฒ์ด๋ค. ๊ทธ๋ค์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํด ๊ฐ๋ฉด์ ํ๋ ฅ์ ์ค๊ณํ๋ค.
- ๊ฐ๋
๊ด์
- ๋๋ฉ์ธ์ ๊ตฌ์ฑํ๋ ์ค์ํ ๊ฐ๋ ๊ณผ ๊ด๊ณ๋ฅผ ๋ฐ์ํ๋ค
- ์ํํธ์จ์ด ํด๋์ค๊ฐ ๋๋ฉ์ธ ๊ฐ๋
์ ํน์ฑ์ ์ต๋ํ ์์ฉํ๋ฉด ๋ณ๊ฒฝ์ ๊ด๋ฆฌํ๊ธฐ ์ฝ๊ณ ์ ์ง๋ณด์์ฑ์ ํฅ์์ํฌ ์ ์๋ค.
- ์๋ฅผ ๋ค์ด, ์ปคํผ๋ฅผ ์ ์กฐํ๋ ๊ณผ์ ์ ๋ณ๊ฒฝํด์ผ ํ๋ค๋ฉด?
Barista
ํด๋์ค
- ์๋ฅผ ๋ค์ด, ์ปคํผ๋ฅผ ์ ์กฐํ๋ ๊ณผ์ ์ ๋ณ๊ฒฝํด์ผ ํ๋ค๋ฉด?
- ๋ช
์ธ ๊ด์
- ํด๋์ค์ ์ธํฐํ์ด์ค๋ฅผ ๋ฐ๋ผ๋ณธ๋ค.
- ํด๋์ค์ public ๋ฉ์๋๋ ๋ค๋ฅธ ํด๋์ค๊ฐ ํ๋ ฅํ ์ ์๋ ๊ณต์ฉ ์ธํฐํ์ด์ค๋ฅผ ๋๋ฌ๋ธ๋ค. ๊ณต์ฉ ์ธํฐํ์ด์ค๋ ์ธ๋ถ์ ๊ฐ์ฒด๊ฐ ํด๋น ๊ฐ์ฒด์ ์ ๊ทผํ ์ ์๋ ์ ์ผํ ๋ถ๋ถ์ด๋ค.
- ์ธํฐํ์ด์ค๋ฅผ ์์ ํ๋ฉด ํด๋น ๊ฐ์ฒด์ ํ๋ ฅํ๋ ๋ชจ๋ ๊ฐ์ฒด์๊ฒ ์ํฅ์ ๋ฏธ์น๋ค.
- ๊ฐ์ฒด์ ์ธํฐํ์ด์ค๋ ์์ ํ๊ธฐ ์ด๋ ต๋ค.
- ๋ณํ์ ์์ ์ ์ธ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ ์ธํฐํ์ด์ค๋ฅผ ํตํด ๊ตฌํ๊ณผ ๊ด๋ จ๋ ์ธ๋ถ ์ฌํญ์ด ๋๋ฌ๋์ง ์๊ฒ ํด์ผ ํ๋ค.
- ํด๋์ค์ ์ธํฐํ์ด์ค๋ฅผ ๋ฐ๋ผ๋ณธ๋ค.
- ๊ตฌํ ๊ด์
- ํด๋์ค์ ๋ด๋ถ ๊ตฌํ์ ๋ฐ๋ผ๋ณธ๋ค.
- ํด๋์ค์ ๋ฉ์๋์ ์์ฑ์ ๊ตฌํ์ ์ํ๋ฉฐ, ๊ณต์ฉ ์ธํฐํ์ด์ค์ ์ผ๋ถ๊ฐ ์๋๋ค.
- ๋ฉ์๋์ ๊ตฌํ๊ณผ ์์ฑ์ ๋ณ๊ฒฝ์ ์์น์ ์ผ๋ก ์ธ๋ถ์ ๊ฐ์ฒด์๊ฒ ์ํฅ์ ๋ฏธ์ณ์๋ ์ ๋๋ค.
- ๋ฉ์๋์ ์์ฑ์ ์ฒ ์ ํ๊ฒ ๋ด๋ถ๋ก ์บก์ ํ ํ๋ค.
๋๋ฉ์ธ ๊ฐ๋ ์์์ ์ ์ ํ ๊ฐ์ฒด๋ฅผ ์ ํํ๋ ๊ฒ์ ๋๋ฉ์ธ์ ๋ํ ์ง์์ ๊ธฐ๋ฐ์ผ๋ก ์ฝ๋์ ๊ตฌ์กฐ์ ์๋ฏธ๋ฅผ ์ฝ๊ฒ ์ ์ถํ ์ ์๊ฒ ํ๋ค. ์ด๊ฒ์ ์์คํ ์ ์ ์ง๋ณด์์ฑ์ ํฐ ์ํฅ์ ๋ฏธ์น๋ค.
์ํํธ์จ์ด๋ ํญ์ ๋ณํ๋ค. ์ค๊ณ๋ ๋ณ๊ฒฝ์ ์ํด ์กด์ฌํ๋ค. ์ฌ๋ฌ ๊ฐ์ ํด๋์ค๋ก ๊ธฐ๋ฅ์ ๋ถํ ํ๊ณ ํด๋์ค ์์์ ์ธํฐํ์ด์ค์ ๊ตฌํ์ ๋ถ๋ฆฌํ๋ ์ด์ ๋ ๋ณ๊ฒฝ์ด ๋ฐ์ํ์ ๋ ์ฝ๋๋ฅผ ์ข ๋ ์์ํ๊ฒ ์์ ํ๊ธธ ๊ฐ์ ํ ์ํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ํํธ์จ์ด ํด๋์ค๊ฐ ๋๋ฉ์ธ ๊ฐ๋ ์ ๋ฐ๋ฅด๋ฉด ๋ณํ์ ์ฝ๊ฒ ๋์ํ ์ ์๋ค.
ํด๋์ค๋ฅผ ๋ดค์ ๋ ํด๋์ค๋ฅผ ๋ช ์ธ ๊ด์ ๊ณผ ๊ตฌํ ๊ด์ ์ผ๋ก ๋๋ ๋ณผ ์ ์์ด์ผ ํ๋ค. ์บก์ํ๋ฅผ ์๋ฐํด์ ๊ตฌํ์ ์ธํฐํ์ด์ค ๋ฐ์ผ๋ก ๋ ธ์ถํด์๋ ์ ๋๊ณ , ์ธํฐํ์ด์ค์ ๊ตฌํ์ ๋ช ํํ๊ฒ ๋ถ๋ฆฌํ์ง ์๊ณ ํ๋ฆฟํ๊ฒ ์์ด๋์์๋ ์๋๋ค.