Builder Pattern
Last updated
Last updated
์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋์๋ ์์ฑ์(constructor)๊ฐ ์ ๊ณต๋๋ฉฐ new ๋ฌธ๋ฒ์ ํตํด ์์ฑ์๋ฅผ ์ด์ฉํ๋ค.
๊ทธ๋ฌ๋ ๊ฐ์ฒด์ ๋๋ฌด ๋ง์ ์์ฑ์๊ฐ ์ ์ธ๋๋ฉด ๊ฐ์ฒด ๋ด๋ถ์ ์๋ ๊ฐ์ฒด ์์ฑ ๋ก์ง์ด ๊ธธ์ด์ ธ ์ฝ๋๊ฐ ์ง์ ๋ถํด์ง๊ณ , ์ฑ ์์ด ๋ถ๋ฆฌ๋์ง ์๋๋ค.
๋ํ, ๊ธฐ์กด ๋ฐฉ์์ ๊ฐ์ฅ ์น๋ช ์ ์ธ ๋ฌธ์ ์ ์, ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ํ ๋ฒ์ ์ค๋น๋์ง ์์ ์ผ๋ถ ๋ฐ์ดํฐ๋ง ์ ๊ณต๋ ์ํ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ํด๋น ์์ฑ ๊ณผ์ ์ด ์ ํจํ์ง ํ๋จํ๋ ๋ก์ง์ด ์๋ค๋ ๊ฒ์ด๋ค.
์ด๋ฌํ ๊ธฐ์กด ์์ฑ์์ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ฒ์ด ๋น๋ ํจํด
์ด๋ค.
Director
- Builder๋ฅผ ์ด์ฉํด Product๋ฅผ ์์ฑํ๋ ํด๋์ค
Builder
- Builder์ ๋คํ์ฑ์ ์ ์ฉํ๊ธฐ ์ํ ์ธํฐํ์ด์ค (Builder๊ฐ ํ๋ ๋ฟ์ด๋ผ๋ฉด ์๋ต ๊ฐ๋ฅ)
ConcreteBuilder
- ๋ง๋ค๊ณ ์ ํ๋ ๊ฐ์ฒด(Product)์ ๋ํด ์ ์ฆ์ ์ผ๋ก ๊ฐ์ ๋ฐ๊ณ ์ด๋ฅผ ์์ฑํ์ฌ ๋ฐํํ๋ ํด๋์ค
Product
- Builder๊ฐ ๋ง๋ค์ด๋ด๋(๋ฐํํ๋) ๊ฒฐ๊ณผ๋ฌผ
Builder ํด๋์ค๋ Java์์๋ ์ฃผ๋ก public static class
๋ก ์ ์ธ๋๋ค.
ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ ๋ฉ์๋๋ค์ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํ๋๋ค.
์ด๋ ๋ค์๊ณผ ๊ฐ์ด ์ฒด์ธ์ ์ด์ด๊ฐ ์ ์ฆ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฑ์๋๊ฐ๊ธฐ ์ํจ์ด๋ค.
Product๋ฅผ ์์ฑํ๋ ๋ฉ์๋ build
๋ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํ๋๋ค.
์ ์ด๋ ๊ฒ ์๋ํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๊ฐ? ์ด๋ Product ํด๋์ค์์ ๋ค์๊ณผ ๊ฐ์ ํ๋ผ์ด๋น ์์ฑ์๋ฅผ ๊ตฌํํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ ์ธ๋ถ์์ ํธ์ถํ ์๋ ์์ผ๋ Product์ inner class์ธ Builder์์๋ ํธ์ถํ ์ ์๋ค.
๋ฐ๋ผ์ Builder์ ์ฌ์ฉ์๋ ์ง์ Product๋ฅผ ์์ฑํ ์๋ ์๊ณ Builder๋ฅผ ํตํด Product๋ฅผ ์์ฑํ๋ ๊ฒ์ด๋ค.