GoF์ ๋์์ธ ํจํด, ๋๋ฒ์งธ ๋น๋ ํจํด์ ๋ํด ์์๋ณธ๋ค.
ํด๋น ๊ธ์, ๋ค์์ ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ดํดํ๋ ๊ฒ์ด ํธ๋ฆฌํฉ๋๋ค.
ํต์ฌ ์์ฝ
๋ณต์กํ ๊ตฌ์ฑ์ ๊ฐ์ฒด๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์์ฑํ๋ ํจํด
- ๋๊ฐ์ง ๊ฒฝ์ฐ์ ์์ฃผ ์ฌ์ฉ๋จ
- ์์ฑ์ ์ง์ ํด์ผ ํ๋ ์ธ์๊ฐ ๋ง์ ๋
- ๊ฐ์ฒด ์์ฑ์ ์ฌ๋ฌ๋จ๊ณ๋ฅผ ์์ฐจ์ ์ผ๋ก ๊ฑฐ์น ๋
- ๋จ๊ณ์ ์์๋ฅผ ๊ฒฐ์ ํด๋๊ณ ๊ฐ ๋จ๊ณ๋ฅผ ๋ค์ํ๊ฒ ๊ตฌํํ ์ ์๋๋ก ํจ
- ์ด ๊ธ์์๋ ๋๋ฒ์งธ ๊ฒฝ์ฐ๋ฅผ ์ฃผ๋ก ์ค๋ช ํจ
์์
- ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์ฌ๋ฌ ํฌ๋งท์ผ๋ก ๋ณ๊ฒฝํ๋ ์์ ์ ํด์ผํ๋ค๊ณ ์๊ฐํด๋ณด์.
- Director๋ Builder๋ฅผ ๋ฐ์ ๋ง๋ ํฌ๋งท์ ์์๋ก ์กฐ์ํ ๋ค ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค ๊ฒ์ด๋ค.
- ๋ง๋ค์ด์ง Builder๋ Data๋ฅผ ๋ณํํ๋๋ฐ ์ฌ์ฉ๋๋ค.
- Builder class๋ฅผ ์ฌ์ฉํ๋ class๋ผ๋ฉด ๋ชจ๋ Director๋ผ ํ ์ ์๋ค.
- Builder ํจํด์ Template, Facade, Strategy ํจํด์ ๊ฐ์ฒด์ ์์ฑ ๊ณผ์ ์ ์ ์ฉํ๋ค๊ณ ๋ ๋ณผ ์ ์๋ค.
- Director๋ Builder๊ฐ์ฒด๊ฐ ๊ฐ์ง๋ method๋ค์ ์ฌ์ฉ์ ๋จ์ํ ์์ผ์ฃผ๊ณ ์๋ค. (Facade)
- Builder๋ฅผ ํตํด ์์ฑํ๋ ๊ณผ์ ์์ ํธ์ถ๋๋ method๋ฅผ interface๋ก ์ ์ธํ๊ณ , ๊ตฌํ์ ํ์ ํด๋์ค์์ ํ ๋ค, method๋ค์ ํธ์ถ ๋ฐฉ์์ Director์์ ์ฒ๋ฆฌํ๋ ๊ฒ (Template ์์ฉ)
- ์ํ๋ ์ํฉ์ ๋ง๋ ํ์์ ๋ฌธ์์ด๋ก ๋ณํ (Strategy)
- ์ฌ์ค ๋จ์ํ๊ณ , OOP์ ๊ธฐ๋ณธ ์์น์ ์ ์ฉํ๋ฉด ๋์ค๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๊ณณ์์๋ ์ข ์ข ์ดํด๋ณผ ์ ์๋ค.
ํ์ฉ์ฑ
- ๊ฐ์ฒด ์์ฑ์ ์์ด ์ธ์๊ฐ ๋ง์ ๊ฒฝ์ฐ
- ๊ฐ์ฒด์ ์์ฑ ์๊ณ ๋ฆฌ์ฆ์ด ๋ฌ๋ผ์ง ํ์๊ฐ ์์ ๋
์ฐธ์ฌ์
- Builder(
Builder
): Product ๊ฐ์ฒด์ ์ผ๋ถ ์์๋ฅผ ์์ฑํ๊ธฐ ์ํ ์ถ์ ์ธํฐํ์ด์ค๋ฅผ ์ ์ - ConcreteBuilder(
PlainTextBuilder
โฆ): Builder ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ฉฐ ๋ถํ์ ๋ชจ์ ์ ํ์ ์กฐ๋ฆฝํจ - Director(
Director
): Builder ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฐ์ฒด๋ฅผ ๊ฐ์ง๊ณ ์ ํ์ ํฉ์ฑํจ - Product(
String
): ์์ฑํ ๋ณตํฉ ๊ฐ์ฒด
ํ๋ ฅ ๋ฐฉ๋ฒ
- Client๋ Director ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , Builder๋ฅผ ํตํด ๊ฐ์ฒด๋ฅผ ํฉ์ฑํ๋ค.
- ์ ํ์ ์ผ๋ถ๊ฐ ๊ตฌ์ถ๋ ๋๋ง๋ค Director๋ Builder์ ์๋ฆฐ๋ค.
- Builder๋ Director์ ์์ฒญ์ ์ฒ๋ฆฌํ์ฌ ์ ํ์ ๋ถํ์ ์ถ๊ฐํ๋ค.
- Director๋ Builder์์ ์ ํ์ ๊ฒ์ํ๋ค.(๋ฆฌํด ๋ฐ๋๋ค.)
๊ฒฐ๊ณผ
- ์ ํ์ ๋ํ ๋ด๋ถ ํํ์ ๋ค์ํ๊ฒ ๋ณํํ ์ ์๋ค.
- ์์ฑ๊ณผ ํํ์ ๋ํ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ๋ค.
- ์์ฑ์ Builder, ํํ์ Director
- ๋ณตํฉ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ์ ์ฐจ๋ฅผ ์ข๋ ์ธ๋ฐํ๊ฒ ๋๋ ์ ์๋ค.
- Builder์๋ ์ ํ์ ๋ง๋๋ ๊ณผ์ ์์ฒด๊ฐ ๋ฐ์๋์ด ์๋ค.
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ด ์์๋ฅผ ์กฐ์ํ๋ ํ์๋ฅผ ์ข๋ ์ธ๋ฐํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค.
๊ด๋ จ ํจํด๊ณผ ์ฐจ์ด์
- ๋ณต์กํ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ผ ํ๋ค๋ฉด ์ถ์ ํฉํ ๋ฆฌ ํจํด์ ๋น๋ ํจํด๊ณผ ์ ์ฌํ ์ ์๋ค.
- ๊ทผ๋ณธ์ ์ธ ์ฐจ์ด๊ฐ ์๋ค๋ฉด, ๋น๋ ํจํด์ ๋ณต์กํ ๊ฐ์ฒด์ ๋จ๊ณ๋ณ ์์ฑ์ ์ค์ ์ ๋๋ค๋ ๊ฒ์ด๋ค.
- ๋ฐ๋ฉด ์ถ์ ํฉํ ๋ฆฌ ํจํด์ ์ ํ์ ์ ์ฌ๊ตฐ์ด ์กด์ฌํ ๋ ์ ์ฐํ ์ค๊ณ์ ์ค์ ์ ๋๋ค๋ ๊ฒ์ด๋ค.
- ๋น๋ ํจํด์ ์์ฑ์ ๋ง์ง๋ง์ ์ ํ์ ๋ฐํํ๋ค.
- ์ถ์ ํฉํ ๋ฆฌ ํจํด์ ์ฆ์ ์ ํ์ ๋ฐํํ๋ค.