๋ณต์กํ ๊ฐ์ฒด์ ์์ฑ์ ๊ทธ ๊ฐ์ฒด์ ํํ๊ณผ ๋ถ๋ฆฌํ์ฌ, ์์ฑ ์ ์ฐจ๋ ํญ์ ๋์ผํ๋ ๊ฒฐ๊ณผ๋ ๋ค๋ฅผ ์ ์๊ฒ ๋ง๋๋ ํจํด
๊ฐ์ฒด์ ๊ตฌ์ฑ์์๋ค์ ์์๋ณ๋ก ๋ถ๋ฆฌํ ๋ค, ๊ฐ๋ณ ์์๋ค์ ๋ํ ๊ฐ์ ์กฐํฉํ์ฌ ํ๋์ ๊ฐ์ฒด๋ฅผ ์์ฑํจ. ์กฐํฉํ๋ ๋ฐฉ๋ฒ์ ๊ตฌ์ฒด์ ์ธ ๋ฐฉ๋ฒ์ ๋น๋๋ฅผ ํตํด ๊ฒฐ์ ํจ.
=> ๋ฉ์๋์ ํธ์ถ ๊ฒฐ๊ณผ๋ก ์์ ์ ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ๋๋ ค์ค.
** ๋ง์ ์์ฑ ์์๋ฅผ ํ๋ฒ์ ๋ฃ์ด ์ฒด์ด๋ ํ์์ผ๋ก ๋ง๋ค์ด์ค ์ ์์.
** return type์ Builder๋ก ํด์ผ ํจ.
- Director : ๊ฐ์ฒด ์์ฑ ๋ฐฉ์์ ๋ํ ์ฑ ์์ ์ง. ConcreteBuilder๋ฅผ ์ธ์๋ก ๋ฐ์ ํ์ ๋์ ์ํ
- Builder : ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ์ถ์ ์ธํฐํ์ด์ค
- ConcreteBuilder : Builder์ ๊ตฌํ ํด๋์ค. ๊ฐ์ฒด ์์ฑ ๊ฒฐ๊ณผ์ ๋ํ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ ์ฑ ์.
- Product : Builder๋ฅผ ์ด์ฉํด์ Director๊ฐ ๋ง๋ค์ด๋ธ ์ต์ข ๊ฐ์ฒด
- ๋ถํ์ํ ์์ฑ์๋ฅผ ๋ง๋ค์ง ์๊ณ ๊ฐ์ฒด ์์ฑ
- ๋ฐ์ดํฐ์ ์์์ ์๊ด ์์ด ๊ฐ์ฒด ์์ฑ
- ์ฌ์ฉ์ ์ ์ฅ์์ ๋ช ์์ ์ด๊ณ ์ดํดํ๊ธฐ ์ฝ๊ฒ ์์ฑ
- ์ฌ๋ฌ ์์๋ฅผ ๊ฐ๋ ๋ณต์กํ ๊ฐ์ฒด๋ฅผ ์์ฑํ ํ์๊ฐ ์์ ๋
- ์ด๋ค ๊ฐ์ฒด๋ฅผ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์์ฑํ ํ์๊ฐ ์์ ๋
- ์ฃผ๋ก ๋ณต์กํ ๊ฐ์ฒด ์์ฑ || ๊ฐ์ฒด์ ๋จ์ํจ, ๋ณต์กํจ ์๊ด์์
- ์ฌ๋ฌ ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ ๋ง์ง๋ง ๋จ๊ณ์์ ๊ฐ์ฒด ๋ฐํ || ํ ๋จ๊ณ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ์ฆ์ ๋ฐํ
- ๋น๋๋ฅผ ํตํ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ฒด ์์ฑ || ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ฒด ์์ฑ
- ํ ๊ฐ์ง ํ์ ์ ํน์ ๊ฐ์ฒด ์์ฑ์ ์ด์ || ๊ฐ์ ์ข ๋ฅ์ ์ฌ๋ฌ ๊ฐ์ง ๊ฐ์ฒด ์์ฑ์ ์ด์