GoF์ ๋์์ธ ํจํด, ํฉํ ๋ฆฌ ๋ฉ์๋ ํจํด์ ๋ํด ์์๋ณธ๋ค.
ํด๋น ๊ธ์, ๋ค์์ ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ดํดํ๋ ๊ฒ์ด ํธ๋ฆฌํฉ๋๋ค.
ํต์ฌ ์์ฝ
- ๊ฐ์ฒด ์์ฑ์ ์ํ ํจํด
- ๊ฐ์ฒด ์์ฑ์ ํ์ํ ๊ณผ์ ์ ํ ํ๋ฆฟ ์ฒ๋ผ ์ ํด๋๊ณ , ๊ฐ ๊ตฌํ์ ๋ฐ๋กํ๋ ๋ฐฉ์์ผ๋ก ๋ค์์ฑ์ ํ๋ณด
- ๊ตฌ์ฒด์ ์ผ๋ก ์์ฑํ ํด๋์ค๋ฅผ ์ ์ฐํ๊ฒ ์ ํ ์ ์์
- ์์ฑ์ ์์ด ํ์ํ ์ธํฐํ์ด์ค์ ๊ตฌํ์ ๋ถ๋ฆฌํจ
- ์ธํฐํ์ด์ค๊ฐ ๊ตฌํ์ ์ ํ ๋ชฐ๋ผ๋ ๋จ
- Package(framwork) ๋จ์๋ก ๋๋์ด ๋ถ๋ฆฌ ํ ๊ฐ๋ฐ๊ฐ๋ฅ
- ํ์ ์ ํจ์จ ์ฆ๋
- ์์คํ ๊ธฐ๋ฅ ํ์ฅ์๋ ์ฉ์ด(interface ์ฑํํ ๊ตฌํ)
- Virtual Constructor(๊ฐ์ ์์ฑ์)๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค.
์์
- Factory: Object ์์ฑ์ ์์ด ํ์ํ ์ ์ฐจ๋ฅผ ์ ํด์ค
- Object: ์์ฑ๋ Object๋ฅผ ๋์ผํ ํ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋๋ก ํจ
- WeaponFactory: ๊ตฌํ์ฒด, ๊ฐ ๋ฌด๊ธฐ์ ์์ฑ ๊ฐ์์ ์ ์ฝ์ ์ฒ๋ฆฌํจ
- Sword, Shield, bow: ๊ตฌํ์ฒด
- ์ฝ๋
ํ์ฉ์ฑ
- ์ด๋ค ํด๋์ค๊ฐ ์์ ์ด ์์ฑํด์ผ ํ๋ ๊ฐ์ฒด์ ํด๋์ค๋ฅผ ์์ธกํ ์ ์์ ๋
- Weapon๋ Weapon์ธ๋ฐ ์ด๋ค Weapon๋ฅผ ์์ฑํ๋์ง์ ๋ํด์๋ ๋ชจ๋ฅด๊ฑฐ๋ ๋ชฐ๋ผ๋ ๋๋ ๊ฒฝ์ฐ
- ์์ฑํ ๊ฐ์ฒด๋ฅผ ๊ธฐ์ ํ๋ ์ฑ
์์ ์๋ธํด๋์ค๊ฐ ์ง์ ํ์ผ๋ฉด ํ ๋
- ์ค์ ๋ก Weapon์ ๋ํ ์ฑ ์์ ๊ตฌํ์ฒด๊ฐ ๋ด๋นํจ
- ๊ฐ์ฒด ์์ฑ์ ์ฑ
์์ ๋ช ๊ฐ์ ๋ณด์กฐ ์๋ธํด๋์ค ๊ฐ์ด๋ฐ ํ๋์๊ฒ ์์ํ๊ณ ,
- ์ด์๊ธฐ๋ ์์ฑ์ ์ฑ ์์ ์๋ธํด๋์ค์ ์ฃผ๊ฒ ๋ค๋ ๊ฒ
- ์ด๋ค ์๋ธํด๋์ค๊ฐ ์์์์ธ์ง์ ๋ํ ์ ๋ณด๋ฅผ ๊ตญ์ํ์ํค๊ณ ์ถ์ ๋
- ์์ฑ์ ๋ด๋นํ๋ ํด๋์ค๋ฅผ ๋ถ๋ฆฌํ์ฌ ๊ด๋ จ ์ฝ๋๋ฅผ ์์ง๋ ๋๊ฒ ๊ด๋ฆฌํ๊ณ ์ถ๋ค๋ ๊ฒ
- ๋ง์ฝ ์ด๋ฌํ ๋ฐฉ๋ฒ์ด ์๋ค๋ฉด ์์ฑ์ ๊ดํ ์ฝ๋๋ ์ฌ๊ธฐ์ ๊ธฐ ํฉ์ด์ ธ ์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ
์ฐธ์ฌ์
- Product(
Object
)- ํฉํ ๋ฆฌ ๋ฉ์๋๊ฐ ์์ฑํ๋ ๊ฐ์ฒด์ ์ธํฐํ์ด์ค๋ฅผ ์ ์
- ConcreteProduct(
Sword
,Shield
,Bow
)- Product ์ถ์ ํด๋์ค์ ์ ์๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํ
- Creator(
Factory
)- Product ํ์ ์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ ์ธ
- ์ธ๋ถ์์ ์ฌ์ฉํ๋ ๊ณตํต ํจ์์ ๋ํด์๋ ๊ธฐ๋ณธ ๊ตฌํ์ด ๋ค์ด๊ฐ(
create(with name: String)
)
- ConcreteCreator(
WeaponFactory
): ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ๊ตฌํ
ํ๋ ฅ ๋ฐฉ๋ฒ
- Creator๋ ์์ ์ subclass๋ฅผ ํตํด ์ค์ ํ์ํ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ๊ตฌํํ๊ณ , ์ ์ ํ ConcreteProduct ์ธ์คํด์ค๋ฅผ ๋ฐํํจ
๊ฒฐ๊ณผ
์ฅ์
- ์ธํฐํ์ด์ค์ ๊ตฌํ์ ๋ถ๋ฆฌ๋ก ์ ์ฐ์ฑ ํ๋ณด
- ์ ์ํ ์ด๋ ํ ConcreteProduct ํด๋์ค์๋ ๋์ ๊ฐ๋ฅ
- ์๋ธ ํด๋์ค(๊ตฌํ์ฒด)์ ๋ํ hook ๋ฉ์๋๋ฅผ ์ ๊ณต
- ์ฆ, ์ฌ์ ์๋ฅผ ํตํด ์์ฉ์ฑ์ด ๋์์ง์ ์๋ฏธ
- Hook: ์ถ์ ํด๋์ค์ ๋ค์ด์๋ ๊ธฐ๋ณธ ํ๋์ ์ ์ํ๋ ๋ฉ์๋, ์ฌ์ ์ ๊ฐ๋ฅ
- ๋ณ๋ ฌ์ ์ธ ํด๋์ค ๊ณํต์ ์ฐ๊ฒฐํ๋ ์ญํ ์ ๋ด๋น
- ๋ณ๋ ฌ์ ํด๋์ค ๊ณํต: ํด๋์ค๊ฐ ์์ ์ ์ฑ ์์ ๋ถ๋ฆฌ๋ ๋ค๋ฅธ ํด๋์ค์ ์์ํ ๋ ๋ฐ์
- ์ฆ, ์์ฑ์ ์ฑ ์์ ๋ถ๋ฆฌํ๋ ํฉํ ๋ฆฌ ๋ฉ์๋๋ ๋ณ๋ ฌ์ ํด๋์ค ๊ณํต์ด ๋ฐ์ํ๋ค๊ณ ๋ณผ ์ ์์. ๊ทธ๋ฆฌ๊ณ ์ด ๋ ์ ์ฉํจ
- ๋จ์ ์ธ ์๋ก ํค๋ ธํธ์ ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ , ๊ธ์จ๋ฅผ ์กฐ์ํ๋ ์ํฉ์ ์๊ฐํด๋ณด๊ฒ ์
- ๊ฐ๊ฐ์ Figure(์ , ๊ธ์จ)์ ๋ํ ๋ง์ฐ์ค ์กฐ์(๋๋ธ ํด๋ฆญ, ๋๋๊ทธ, ์ฐํด๋ฆญ ๋ฑ)์ ์ ํด์ ธ์์ผ๋, ๊ทธ์ ๋ํ ๋์์ ๋ค๋ฅผ ๊ฒ์
- ์ด๋ฐ ๊ฒฝ์ฐ, ๊ฐ Figure์ ๋ํ Manipulator๋ฅผ ์์ผ๋ก ๋๋ ๊ฒ์ด ๋ฐ๋์ง ํจ
- ์ด ๋, ์ด Manipulator๋ฅผ ์์ฑํ๋ ์ฑ ์์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ก ๊ตฌํํ๋ค๊ณ ๊ฐ์ ํด๋ณด์.
- ๊ทธ๋ ๋ค๋ฉด Figure์ ํด๋์ค ๊ณํต์ด ์ปค์ง๋ฉด Manipulator์ ํด๋์ค ๊ณํต ์ญ์ ์ปค์ง๋, ๋ณ๋ ฌ์ ํด๋์ค ๊ณํต์ด ๋ฐ์ํ๊ฒ ๋จ
- ์ด ๋, Manipulator์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ ์ฉํ๊ธฐ ๋๋ฌธ์ ์ด ์ฌ์ด๋ฅผ ์ฐ๊ฒฐํ๋ ์ญํ ์ ๋ด๋นํ๊ฒ ๋จ
๋จ์
- ConcreteProduct๊ฐ ํ๊ฐ ๋ฐ์ ์๋ ํฉํ ๋ฆฌ์ธ๋ฐ Creator๋ฅผ ๊ตฌํํ๋ ํฉํ ๋ฆฌ๋ฅผ ๋ง๋ค์ด์ผ ํ๋๊ฐ?
๊ด๋ จ ํจํด๊ณผ ์ฐจ์ด์
- 03. Abstract Factory ํจํด์ ์ด ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ด์ฉํด์ ๊ตฌํํ ๋๊ฐ ๋ง์
- ํฉํ ๋ฆฌ ๋ฉ์๋๋ 25. Template Method ํจํด์์๋ ์ฌ์ฉ๋ ๋๊ฐ ๋ง์