ํฉํ ๋ฆฌ ๋ฉ์๋ ํจํด์ ๊ฐ์ฒด์งํฅ ๋์์ธ ํจํด์ ํ๋์ธ๋ฐ Factory emthod๋ ๋ถ๋ชจ ํด๋์ค์ ์๋ ค์ง์ง ์๋ ๊ตฌ์ฒด ํด๋์ค๋ฅผ ์์ฑํ๋ ํจํด์ด๋ค. ๋๋ฌธ์ ์์ ํด๋์ค๊ฐ ์ด๋ค ๊ฐ์ฒด๋ฅผ ์์ฑํด์ผ ํ ์ง ์๋ ค์ฃผ๋ ํจํด์ด๊ธฐ๋ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ฃผ๋ก ํด๋์ค ์ฝ๋์ ๊ตฌ์ฒด ํด๋์ค ์ด๋ฆ์ ๊ฐ์ถ๊ฐ ์ํด์๋ ์ฌ์ฉ๋๋ ํจํด์ ๋๋ค.
์ฆ ๋ถ๋ชจ ํด๋์ค์์ ๊ฐ์ฒด๋ค์ ์์ฑํ ์ ์๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ์ง๋ง, ์์ ํด๋์ค๋ค์ด ์์ฑ๋ ๊ฐ์ฒด์ ์ ํ์ ๋ณ๊ฒฝํ ์ ์๋๋ก ํ๋ ํจํด์ ๋๋ค.
์๋ฅผ ๋ค์ด์ ๊ณต์ฅ๊ด๋ฆฌ ์ฑ์ ๋ง๋ค๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฑ ๊ธฐ๋ฅ ์ค ํธ๋ญ ์ด์ก์ ์ฒ๋ฆฌํ ์ ์๋ ํธ๋ญ ํด๋์ค๊ฐ ์๋ค๊ณ ์๊ฐํด๋ด ์๋ค. ํ์ง๋ง ์ด๋ ๋ ๋นํ๊ธฐ ๊ด๋ จ ๋ฐฐ์ก์ ์ง์ํ๊ฒ ๋ค๊ณ ๋ฐํ๊ฐ ๋ฌ์ต๋๋ค. ๊ทผ๋ฐ ์ ๋ ์ง์๋ง ํ ์ค ์๊ณ base ์ฝ๋๋ฅผ ํธ๋ญ ํด๋์ค์ ๊ฒฐํฉ๋ผ์๋๋ก ๋ง๋ค์๋ค๊ณ ์๊ฐํฉ์๋ค. ๊ทธ๋ฌ๋ฉด ๋ง์ฝ ์ ๊ฐ ์ฌ๊ธฐ์ ๋นํ๊ธฐ๋ฅผ ์ถ๊ฐํ๊ฒ ๋๋ฉด ๋๋ ๋นํ์ฝ๋๋ฅผ ์๋ชป ๋ฃ์๋ค๊ฐ๋ ์ก์์ ๋ฌ๋ฆฌ๋ ๋นํ๊ธฐ ๋๋ ํ๋์ ๋ ์๋ค๋๋ ํธ๋ญ์ด ์์ฑ๋ ๊ฒ์ ๋๋ค. ๋๋ ์ฝ๋๋ฅผ ์น ๋ค ๋ฐ๊พธ๋ ๋ฐฉ๋ฒ๋ ์์ฃ ํ์ง๋ง base ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋งค์ฐ ํ๋ ์ผ์ ๋๋ค. ๊ทธ๋ฌ๋ฉด ํฉํ ๋ฆฌ ๋ฉ์๋๋ ์ด๋ฐ ์ํฉ์ base ์ฝ๋๋ฅผ ์ ๋ถ ๋ฏ์ด๊ณ ์น๋ ๊ฒ์ด ์๋ ํ์ฌ ์ด์ก ์ถ๊ฐ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์์ฒญ์ ๋ง๊ฒ ์ด์ก์ ์ถ๊ฐํด์ฃผ์ ๋ค๊ณ ์๊ฐํ์๋ฉด ์ฝ์ต๋๋ค. ๋๋ฌธ์ ํฉํ ๋ฆฌ ๋ฉ์๋์ ํน์ด์ ์ ์ด๋ค ์ด์ก ์๋จ์ด ์ถ๊ฐ๋ ์ง ๋ชฐ๋ผ๋ ์์ฒญ์ ๋ง๋ ์ด์ก ๊ธฐ๋ฅ์ ์ถ๊ฐํด ์ฃผ๋ ๊ฒ์ ๋๋ค.
๋์ค์ ์ฑ์ ๊ธฐ๋ฅ์ด ์๋ค๋ฅธ ๊ฒ๋ค์ด ๋์ด๋๋ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด์ ๋ ๊ธฐ๋ฅ ์ถ๊ฐํ ๋ ํ์ํด๋์ค๋ง ์ถ๊ฐํ๋ฉด ๋๊ธฐ์ ์ ์ง๋ณด์๊ฐ ๋์์ง ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ฌธ์ ์ ๋ ๋ง์ ๊ธฐ๋ฅ๋ค์ด ์๊ฒจ๋๋ ํ๋ก์ ํธ์ ๋์ ํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค๊ณ ์๊ฐํฉ๋๋ค.
ConcreteCreator -> Creator -> Product <- ConcreteProduct
ConcreteCreator = Creator๋ฅผ ๊ฐ์ง๊ณ ์๊ณ Product์ ๋ง๊ฒ ๊ตฌ์ฒด์ ๊ธฐ๋ฅ ์ค๊ณ
Creator = Factory์ ๊ธฐ๋ณธ ์ญํ ์ ์ ์ํ๋ ๊ฐ์ฒด
Product = Concrete Product๊ฐ ํด์ผ ํ ๋์์ ์ ์ธํ๋ ๊ฐ์ฒด
Concrete Product = Product๋ฅผ ์ฑํํ๋ฉฐ ๊ทธ์ ๋ง๊ฒ ๋ง๋ ์ค์ ๊ฐ์ฒด
- ํ๋กํ ์ฝ์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ์ ์ํ๋ ์ฉ๋์ด๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ํ์ ํด๋์ค๋ฅผ ์ถ๊ฐํ ์ ์๊ธฐ ๋๋ฌธ์ ์ ์ฐํ๊ณ ํ์ฅ์ฑ์ด ๋๋ค.
- ์ฝ๋ ์์ ์ด ์๊ฒจ๋ ํฉํ ๋ฆฌ ๋ฉ์๋๋ง ์์ ํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ์์ ์ ์ฉ์ดํ๋ค.
- ์ ์ง๋ณด์ ๊ด๋ฆฌ๊ฐ ํธํด์ง๋ค.
- ๊ฐ๋ฐฉ/ํ์ ์์น์ ์์ฉํ๊ณ ์์ด์ ๊ธฐ์กด ํด๋ผ์ด์ธํธ์ ์ฝ๋๋ฅผ ํผ์ํ์ง ์๊ณ ์ฝ๊ฒ ์ํ๋ ๊ฒ์ ๋์ ํ ์ ์๋ค
- Product๋ฅผ ์ถ๊ฐํ ๊ฒฝ์ฐ ์๋ก์ด ํ์ํด๋์ค๋ฅผ ์ ์ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ถํ์ํ ํด๋์ค ์ ์๊ฐ ์๊ฒจ์ ์ฝ๋๊ฐ ๋ณต์กํด์ง ์๋ ์๋ค
- ์ค์ฒฉ๋์ด ์ฌ์ฉํ๋ฉด ์ฝ๋๊ฐ ๋งค์ฐ ๋ณต์กํด์ง๋ค.
FactoryMethod Pattern ์์ ์ฝ๋
์ค๋๋ ๊ธด ๊ธ ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ์ข์ ํ๋ฃจ ๋ณด๋ด์ธ์~