๋์์ธํจํด์ด๋?
๋์์ธ ํจํด์ ๊ฐ ๋ชจ๋์ ์ธ๋ถํ๋ ์ญํ ์ด๋ ๋ชจ๋๋ค๊ฐ์ ์ธํฐํ์ด์ค์ ๊ฐ์ ์ฝ๋๋ฅผ ์์ฑํ๋ ์์ค์ ์ธ๋ถ์ ์ธ ๊ตฌํ ๋ฐฉ์์ ์ค๊ณํ ๋ ์ฐธ์กฐํ ์์๋ ์ ํ์ ์ธ ํด๊ฒฐ๋ฐฉ์ / ์์ ๋ฅผ ์๋ฏธํ๋ค.
๋์์ธํจํด์ ๋ฌธ์ ๋ฐ ๋ฐฐ๊ฒฝ, ์ค์ ์ ์ฉ๋ ์ฌ๋ก, ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ ์ํ ์ฝ๋ ๋ฑ์ผ๋ก ๊ตฌ์ฑ๋๋ค.
Don't reinvent the wheel ! (๋ฐํด๋ฅผ ๋ค์ ๋ฐ๋ช ํ์ง๋ง๋ผ) ๋ผ๋ ๋ง๊ณผ ๊ฐ์ด, ๊ฐ๋ฐ ๊ณผ์ ์ค์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ์๋ก ํด๊ฒฐ์ฑ ์ ๊ตฌ์ํ๋ ๊ฒ๋ณด๋ค ๋ฌธ์ ์ ํด๋นํ๋ ๋์์ธ ํจํด์ ์ฐธ๊ณ ํ์ฌ ์ ์ฉํ๋ ๊ฒ์ด ๋ ํจ์จ์ ์ด๋ค.
GoF๋์์ธํจํด?
๋ฐฐ๊ฒฝ
๋ ผ๋ฌธ "Using Pattern Languages for Object-Oriented Programs" (1987)์ ํตํด ์ ์๋์๋ค. ์ดํ์ 23๊ฐ์ ํจํด์ ์๋กํ 'GoF'(Gang of Fours). Design Patterns: Elements of Reusable Object-Oriented Software. (1995) ๋ฅผ ํตํด ์ ๋ช ์ธ๋ฅผ ํ๊ฒ๋์๋ค.
ํ์ฌ์๋ ์์ฒ์ฌ๊ฐ์ ํจํด์ด ๋ฐํ๋์์ผ๋ฉฐ, ์ด๋ ๊ฐ์ฒด์งํฅํ๋ก๊ทธ๋๋ฐ์ ๋น์ค์ด ๋์ด๋๋ฉด์ ์ฌ์ฌ์ฉ๊ด์ ์์ ์ํธ๊ฐ ์ปค๋ฎค๋์ผ์ด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํจ์ผ๋ก ๋ณด์ธ๋ค.
1) ์์ฑํจํด(Creational Pattern)
๊ฐ์ฒด ์์ฑ๊ณผ ์ฐธ์กฐ๊ณผ์ ์ ์บก์ํ ํ์ฌ ๊ฐ์ฒด๊ฐ ์์ฑ๋๊ฑฐ๋ ๋ณ๊ฒฝ๋์ด๋ ํ๋ก๊ทธ๋จ์ ๊ตฌ์กฐ์ ์ํฅ์ ํฌ๊ฒ ๋ฐ์ง ์๋๋ก ํ์ฌ ํ๋ก๊ทธ๋จ์ ์ ์ฐ์ฑ์ ๋ํ๋ค.
2) ๊ตฌ์กฐํจํด(Structural Pattern)
ํด๋์ค๋ ๊ฐ์ฒด๋ค์ ์กฐํฉํ์ฌ ๋ ํฐ ๊ตฌ์กฐ๋ก ๋ง๋ค์์๊ฒ ํด์ฃผ๋ ํจํด์ด๋ค. ์ด 7๊ฐ๊ฐ ์์ผ๋ฉฐ ๋ณต์กํ ์์คํ ์ ๊ฐ๋ฐํ๊ธฐ ์ฝ๊ฒ ๋์์ค๋ค.
3) ํ์ ํจํด(Behavioral Pattern)
ํด๋์ค๋ ๊ฐ์ฒด๋ค์ด ์๋ก ์ํธ์์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ ์ฑ ์ ๋ถ๋ฐฐ๋ฐฉ๋ฒ์ ์ ์ํ๋ ํจํด์ผ๋ก ์ด 11๊ฐ์ ํจํด์ด ์๋ค. ํ๋์ ๊ฐ์ฒด๋ก ์ํํ ์ ์๋ ์์ ์ ์ฌ๋ฌ ๊ฐ์ฒด๋ก ๋ถ๋ฐฐํ๋ฉด์ ๊ฒฐํฉ๋๋ฅผ ์ต์ํํ ์์๋๋ก ๋์์ค๋ค.