Prototype Pattern
Prototype Pattern (ํ๋กํ ํ์
ํจํด)
๊ฑฐ์ ๋์ผํ ๊ฐ์ฒด๋ฅผ ์ฌ๋ฌ ๊ฐ ์์ฑํ๊ณ ์ ํ ๋, ์ด๋ฅผ ์ผ์ผ์ด ์์ฑํ๋ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๋ฅผ ๊ฐ๋๋ค.
Client๊ฐ ๊ตฌ์ฒด์ ์ธ ๊ฒ(์์ฑํ๊ณ ์ ํ๋ ConcreteClass)์ ์ ๊ทผํ๊ฒ ๋๋ค.
์ด๋ฅผ ์ํด Client๋ ๋ชจ๋ ๊ตฌ์ฒด์ ํด๋์ค์ ๋ํด ์๊ณ ์์ด์ผ ํ๋ฉฐ, ๊ตฌ์ฒด์ ํด๋์ค๊ฐ ์ถ๊ฐ๋ ๋๋ง๋ค Client ๋ํ ์์ ๋์ด์ผ ํ๋ค.
๊ฐ์ฒด์ ํ์ ์ด ์ปดํ์ผ ํ์์ ๊ฒฐ์ ๋๋ค.
๊ฐ์ฒด์ ํ์ ์ด ์ ์ ์ผ๋ก ๊ฒฐ์ ๋๋ฏ๋ก ์ตํต์ฑ ์๊ฒ ์๋์ํค๊ธฐ ์ด๋ ต๋ค.
์ด๋ฌํ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ํจํด์ด ๋ฐ๋ก ํ๋กํ ํ์ ํจํด(Prototype Pattern)์ด๋ค.
ํ๋กํ ํ์ ์ ๋ค์๊ณผ ๊ฐ์ด ๋์ํ๋ค.
๊ฐ ๊ตฌ์ฒด์ ํด๋์ค๊ฐ clone ๋ฉ์๋๋ฅผ ํฌํจํ๋ Prototype ์ธํฐํ์ด์ค(๋๋ ์ถ์ ํด๋์ค)๋ฅผ ๊ตฌํํ๋๋ก ํ๋ค.
์ฆ, ๊ตฌ์ฒด์ ํด๋์ค์๊ฒ ์๊ธฐ ์์ ์ ๋ณต์ ํ ์ฑ ์์ ๋งก๊น์ผ๋ก์จ Client๊ฐ ๊ตฌ์ฒด์ ํด๋์ค๋ฅผ ์์ง ์์๋ ๋ณต์ ํ ์ ์๋๋ก ํ๋ค.
๊ฐ์ฒด์ ํ์ ์ ๋ฐํ์์ ๊ฒฐ์ ํ ์ ์๋๋ก ํ๋ค.
๊ตฌ์ฑ ์์

Client
- ์ถ์์ ์ธ ๊ฐ์ฒด๋ง ์ฐธ์กฐํ๋ฉฐ clone ํจ์๋ฅผ ์ด์ฉํด ๋ณต์ ๋ ๊ฐ์ฒด๋ฅผ ํ๋ํ๋ค.Prototype
- ํด๋ก ๋ฉ์๋๊ฐ ์ ์ธ๋ ์ธํฐํ์ด์ค ๋๋ ์ถ์ ํด๋์คConcretePrototype
- ์๊ธฐ ์์ ์ ๋ณต์ ํ๋ clone ๋ฉ์๋๋ฅผ ๊ตฌํํ๋ ํด๋์ค
ํน์ง
clone์ ์ด๋ฆ๊ท์น์ด๊ธฐ ๋๋ฌธ์ ๋ฉ์๋๋ช ์ ์์๋ก ๋ณ๊ฒฝํ์ง ์๋ ๊ฒ์ด ์ข๋ค. (๋ณ๊ฒฝํ๋๋ผ๋ ๋ฐ๋์ ๋น์ทํ ๋งฅ๋ฝ์ ๋์ด ํ๋กํ ํ์ ํจํด์ ์ฌ์ฉํ์์ ์ ์ ์๋๋ก ํด์ผ ํจ)
ํฉํ ๋ฆฌ ๋ฉ์๋ ํจํด, ์ถ์ ํฉํ ๋ฆฌ ํจํด๊ณผ ํจ๊ป ์ฌ์ฉ๋์ด ํฉํ ๋ฆฌ๊ฐ ๊ฐ ๊ฐ์ฒด๋ฅผ ๋ณต์ ํ์ฌ ์ ๊ณตํ ์ ์๋๋ก ํ ์๋ ์๋ค.
Last updated