ํฐ์คํ ๋ฆฌ ๋ทฐ
[Design Pattern] GoF(Gang of Four) ๋์์ธ ํจํด ์ข ๋ฅ
๊ฐ๋ฐ๊ฐ๊ตด๐ธ 2022. 6. 28. 21:11๋์์ธ ํจํด์ด๋?
๋์์ธ ํจํด์ ์ํํธ์จ์ด ๊ณตํ์ ์ํํธ์จ์ด ์ค๊ณ์์ ๊ณตํต์ผ๋ก ๋ฐ์ํ๋ ๋ฌธ์ ์ ๋ํด ์์ฃผ ์ฐ์ด๋ ์ค๊ณ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํ ํจํด์ ๋๋ค.
๋ชจ๋์ ์ธ๋ถํ๋ ์ญํ ์ด๋ ๋ชจ๋๋ค ๊ฐ์ ์ธํฐํ์ด์ค ๊ตฌํ ๋ฐฉ์์ ์ค๊ณํ ๋ ์ฐธ์กฐํ ์ ์๋ ์ ํ์ ์ธ ํด๊ฒฐ ๋ฐฉ์์ด๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
๋ํ, ๋์์ธ ํจํด์ ํ ํจํด์ ๋ณํ์ ๊ฐํ๊ฑฐ๋ ์ด๋ ํ ์๊ตฌ์ฌํญ์ ๋ฐ์ํ๋ฉด ๋ค๋ฅธ ํจํด์ผ๋ก ๋ณํ๋๋ ํน์ง์ด ์์ต๋๋ค.
*ํจํด : ๋น์ทํ๊ฑฐ๋ ๋์ผํ ์์ ๋๋ ์ ํ๋ค์ด ๋ฐ๋ณต๋์ด ๋ํ๋จ, ๋ฌธ์ ์ ํด๊ฒฐ์ฑ ๋ ๋์ผํ ์ ํ์ด๋ ์์์ ํตํด ์ฝ๊ฒ ์ฐพ์
๋์์ธ ํจํด์ ์ฅ๋จ์
- ์ฅ์ : ๊ฐ๋ฐ์ ํจ์จ์ฑ, ์ ์ง๋ณด์์ฑ, ์ด์ฉ์ฑ์ด ๋์์ง๋ฉฐ ํ๋ก๊ทธ๋จ์ ์ต์ ํ๊ฐ ๊ฐ๋ฅ(๋ถํ์ํ ๋ฆฌ์์ค ๋ญ๋น ๋ฐฉ์ง)
- ๋จ์ : ์ด๊ธฐ ํฌ์ ๋น์ฉ์ ๋ถ๋ด
๋์์ธ ํจํด์ ๊ตฌ์ฑ ์์
- context : ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ์ฌ๋ฌ ์ํฉ์ ๊ธฐ์ , ํจํด์ด ์ ์ฉ๋ ์ ์๋ ์ํฉ์ ๋ํ๋
- problem : ํจํด์ด ์ ์ฉ๋์ด ํด๊ฒฐ๋ ํ์๊ฐ ์๋ ์ฌ๋ฌ ๋์์ธ ์ด์๋ค์ ๊ธฐ์ , ์ด๋ ์ฌ๋ฌ ์ ์ฝ ์ฌํญ๊ณผ ์ํฅ๋ ฅ๋ ๋ฌธ์ ํด๊ฒฐ์ ์ํด ๊ณ ๋ ค
- solution : ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋๋ก ์ค๊ณ๋ฅผ ๊ตฌ์ฑํ๋ ์์๋ค๊ณผ ๊ทธ ์์๋ค ์ฌ์ด์ ๊ด๊ณ, ์ฑ ์, ํ๋ ฅ ๊ด๊ณ๋ฅผ ๊ธฐ์
** ์ํคํ ์ณ ํจํด vs ๋์์ธ ํจํด
- ์ํคํ ์ณ ํจํด์ ๋์์ธ ํจํด๋ณด๋ค ์์ ์์ค์ ์ค๊ณ์ ์ฌ์ฉ๋๋ค.
- ์ํคํ ์ณ ํจํด์ด ์ ์ฒด ์์คํ ์ ๊ตฌ์กฐ๋ฅผ ์ค๊ณํ๊ธฐ ์ํ ์ฐธ์กฐ ๋ชจ๋ธ์ด๋ผ๋ฉด, ๋์์ธ ํจํด์ ์๋ธ์์คํ ์ ์ํ๋ ์ปดํฌ๋ํธ๋ค๋ผ๋ฆฌ์ ๊ด๊ณ๋ฅผ ์ค๊ณํ๊ธฐ ์ํ ์ฐธ์กฐ ๋ชจ๋ธ์ด๋ค.
GoF๋?
1995๋ GoF๋ผ๊ณ ๋ถ๋ฆฌ๋ Erich Gamma, Richard Helm, Ralph Johnson, John Vissides 4๋ช ์ด ์ฒ์์ผ๋ก ๋์์ธ ํจํด์ ๊ตฌ์ฒดํ ํ์๋๋ฐ, GoF์ ๋์์ธ ํจํด์ ์ํํธ์จ์ด ๊ณตํ์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ๋์์ธ ํจํด์ ๋๋ค.
GoF์ ๋ถ๋ฅ ๊ธฐ์ค
GoF ๋์์ธ ํจํด์ ๋ถ๋ฅํ๋ ๊ธฐ์ค์ 2๊ฐ์ง๊ฐ ์์ต๋๋ค.
1. ๋ชฉ์ ์ ๋ฐ๋ผ ๋ถ๋ฅ
์์ฑํจํด 5๊ฐ, ๊ตฌ์กฐ ํจํด 7๊ฐ, ํ์ ํจํด 11๊ฐ, ์ด 23๊ฐ์ ํจํด์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
์ ํ | ์ค๋ช |
์์ฑ | ๊ฐ์ฒด ์ธ์คํด์ค ์์ฑ์ ๊ด์ฌ, ํด๋์ค ์ ์์ ๊ฐ์ฒด ์์ฑ ๋ฐฉ์์ ๊ตฌ์กฐํ, ์บก์ํ๋ฅผ ์ํํ๋ ํจํด |
๊ตฌ์กฐ | ๋ ํฐ ๊ตฌ์กฐ ํ์ฑ ๋ชฉ์ ์ผ๋ก ํด๋์ค๋ ๊ฐ์ฒด์ ํฉ์ฑ(์กฐํฉ)์ ๋ค๋ฃจ๋ ํจํด |
ํ์ | ํด๋์ค๋ ๊ฐ์ฒด๋ค์ด ์ํธ์์ฉํ๋ ๋ฐฉ๋ฒ๊ณผ ์ญํ ๋ถ๋ด ๋ฐฉ๋ฒ์ ๋ค๋ฃจ๋ ํจํด |
2. ๋ฒ์์ ๋ฐ๋ผ ๋ถ๋ฅ
ํจํด์ ์ฃผ๋ก ํด๋์ค์ ์ ์ฉํ๋์ง, ๊ฐ์ฒด์ ์ ์ฉํ๋์ง ๊ตฌ๋ถํ๋ ๊ฒ์ ๋๋ค.
์ ํ | ์ค๋ช |
ํด๋์ค | ํด๋์ค์ ์๋ธํด๋์ค ๊ฐ์ ๊ด๋ จ์ฑ์ ๋ค๋ฃจ๊ณ , ์ฃผ๋ก ์์์ ํตํด ๊ด๋ จ๋๋ฉฐ, ์ปดํ์ผ ํ์์ ์ ์ ์ผ๋ก ๊ฒฐ์ |
๊ฐ์ฒด | ๊ฐ์ฒด ๊ฐ์ ๊ด๋ จ์ฑ์ ๋ค๋ฃจ๊ณ , ๋ฐํ์์ ๋ณ๊ฒฝ๋ ์ ์๋ ๋์ ์ธ ์ฑ๊ฒฉ์ ๊ฐ์ง |
๋์์ธ ํจํด ๋ถ๋ฅํ
์์ฑ ํจํด
์์ฑ ํจํด์ ๊ฐ์ฒด์ ์์ฑ๊ณผ ๊ด๋ จ๋ ํจํด์ผ๋ก, ๊ฐ์ฒด์ ์ธ์คํด์ค ๊ณผ์ ์ ์ถ์ํ ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ๊ฐ์ฒด์ ์์ฑ๊ณผ ์ฐธ์กฐ ๊ณผ์ ์ ์บก์ํํ์ฌ ๊ฐ์ฒด๊ฐ ์์ฑ๋๊ฑฐ๋ ๋ณ๊ฒฝ๋์ด๋ ํ๋ก๊ทธ๋จ ๊ตฌ์กฐ์ ์ํฅ์ ๋ฐ์ง ์๋๋ก ํ์ฌ ํ๋ก๊ทธ๋จ์ ์ ์ฐ์ฑ์ ๋ํด์ค๋๋ค.
- ์์ฑ ํด๋์ค ํจํด์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ์ผ๋ถ๋ฅผ ์๋ธํด๋์ค๊ฐ ๋ด๋นํ๋๋ก ํจ
- ์์ฑ ๊ฐ์ฒด ํจํด์ ๊ฐ์ฒด ์์ฑ์ ๋ค๋ฅธ ๊ฐ์ฒด์๊ฒ ์์
์ด๋ฆ | ์๋ |
์ถ์ ํฉํ ๋ฆฌ(Abstract Factory) | ๊ตฌ์ฒด์ ์ธ ํด๋์ค๋ฅผ ์ง์ ํ์ง ์๊ณ ์ธํฐํ์ด์ค๋ฅผ ํตํด ์๋ก ์ฐ๊ด๋๋ ๊ฐ์ฒด๋ค์ ๊ทธ๋ฃน์ผ๋ก ํํ |
๋น๋(Builder) | ๋ณตํฉ ๊ฐ์ฒด์ ์์ฑ๊ณผ ํํ์ ๋ถ๋ฆฌํ์ฌ ๋์ผํ ์์ฑ ์ ์ฐจ์์๋ ๋ค๋ฅธ ํํ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด๋ผ ์ ์์ |
ํฉํ ๋ฆฌ ๋ฉ์๋(Factory Method) | ๊ฐ์ฒด ์์ฑ์ ์๋ธํด๋์ค๋ก ์์ํ์ฌ ์บก์ํํจ |
ํ๋กํ ํ์ (Prototype) | ์๋ณธ ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํจ์ผ๋ก์จ ๊ฐ์ฒด๋ฅผ ์์ฑํจ |
์ฑ๊ธํค(Singleton) | ์ด๋ค ํด๋์ค์ ์ธ์คํด์ค๋ ํ๋์์ ๋ณด์ฅํ๊ณ ์ด๋์๋ ์ฐธ์กฐํ ์ ์๋๋ก ํจ |
๊ตฌ์กฐ ํจํด
๊ตฌ์กฐ ํจํด์ ํด๋์ค๋ ๊ฐ์ฒด๋ค์ ์กฐํฉํด ๋ ํฐ ๊ตฌ์กฐ๋ก ๋ง๋ค ์ ์๊ฒ ํด์ฃผ๋ ํจํด์ ๋๋ค.
- ๊ตฌ์กฐ ํด๋์ค ํจํด : ์์์ ํตํด ํด๋์ค๋ ์ธํฐํ์ด์ค๋ฅผ ํฉ์ฑ
- ๊ตฌ์กฐ ๊ฐ์ฒด ํจํด์ ๊ฐ์ฒด๋ฅผ ํฉ์ฑํ๋ ๋ฐฉ๋ฒ์ ์ ์
์ด๋ฆ | ์๋ |
์ด๋ํฐ(Adapter) | ํด๋์ค์ ์ธํฐํ์ด์ค๋ฅผ ๋ค๋ฅธ ์ธํฐํ์ด์ค๋ก ๋ณํํ์ฌ ๋ค๋ฅธ ํด๋์ค๊ฐ ์ด์ฉํ ์ ์๋๋ก ํจ |
๋ธ๋ฆฌ์ง(Bridge) | ๊ตฌํ๋ถ์์ ์ถ์์ธต์ ๋ถ๋ฆฌํ์ฌ ๊ฐ์ ๋ ๋ฆฝ์ ์ผ๋ก ํ์ฅํ ์ ์๊ฒ ํจ |
์ปดํฌ์งํธ(Composite) | ๊ฐ์ฒด๋ค์ ๊ด๊ณ๋ฅผ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๊ตฌ์ฑํ์ฌ ๋ณตํฉ ๊ฐ์ฒด์ ๋จ์ผ ๊ฐ์ฒด๋ฅผ ๊ตฌ๋ถ์์ด ๋ค๋ฃธ |
๋ฐ์ฝ๋ ์ดํฐ(Decorator) | ์ฃผ์ด์ง ์ํฉ ๋ฐ ์ฉ๋์ ๋ฐ๋ผ ์ด๋ค ๊ฐ์ฒด์ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๋ง๋ถ์ด๋ ๋ฐฉ์ |
ํผ์ธ๋(Facade) | ์๋ธ์์คํ ์ ์๋ ์ธํฐํ์ด์ค ์งํฉ์ ๋ํด ํ๋์ ํตํฉ๋ ์ธํฐํ์ด์ค(Wrapper) ์ ๊ณต |
ํ๋ผ์ด์จ์ดํธ(Flyweight) | ํฌ๊ธฐ๊ฐ ์์ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๋งค๋ฒ ์์ฑํ์ง ์๊ณ ๊ฐ๋ฅํ ๊ณต์ ํ ์ ์๋๋ก ํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฝํจ |
ํ๋ก์(Proxy) | ์ ๊ทผ์ด ์ด๋ ค์ด ๊ฐ์ฒด๋ก์ ์ ๊ทผ์ ์ ์ดํ๊ธฐ ์ํด ๊ฐ์ฒด์ Surrogate๋ Placeholder๋ฅผ ์ ๊ณต |
ํ์ ํจํด
ํ์ ํจํด์ ํด๋์ค๋ ๊ฐ์ฒด๋ค์ด ์๋ก ์ํธ์์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ ์ด๋ค ํ์คํฌ, ์ด๋ค ์๊ณ ๋ฆฌ์ฆ์ ์ด๋ค ๊ฐ์ฒด์ ํ ๋นํ๋ ๊ฒ์ด ์ข์์ง๋ฅผ ์ ์ํ๋ ํจํด์ ๋๋ค. ์ฆ, ๊ฐ์ฒด๋ ํด๋์ค์ ๊ต๋ฅ ๋ฐฉ๋ฒ์ ๋ํด ์ ์ํ๋ ๊ฒ์ ๋๋ค. ํ์ ํจํด์ ํ๋์ ๊ฐ์ฒด๋ก ์ํํ ์ ์๋ ์์ ์ ์ฌ๋ฌ ๊ฐ์ฒด๋ก ๋ถ๋ฐฐํ๋ฉด์ ๊ทธ๋ค ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ์ต์ํ ํ ์ ์๋๋ก ๋์์ค๋๋ค.
- ํ์ ํด๋์ค ํจํด : ์์์ ํตํด ์๊ณ ๋ฆฌ์ฆ๊ณผ ์ ์ด ํ๋ฆ์ ๊ธฐ์
- ํ์ ๊ฐ์ฒด ํจํด : ํ๋์ ์์ ์ ์ํํ๊ธฐ ์ํด ๊ฐ์ฒด ์งํฉ์ด ์ด๋ป๊ฒ ํ๋ ฅํ๋์ง ๊ธฐ์
์ด๋ฆ | ์๋ |
์ฑ ์ ์ฐ์(Chain of Responsibility) | ์์ฒญ์ ๋ฐ๋ ๊ฐ์ฒด๋ฅผ ์ฐ์์ ์ผ๋ก ๋ฌถ์ด ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋๊น์ง ๊ฐ์ฒด Chain์ ๋ฐ๋ผ ์์ฒญ์ ์ ๋ฌํจ |
์ปค๋งจ๋(Command) | ์์ฒญ์ ๊ฐ์ฒด์ ํํ๋ก ์บก์ํํ์ฌ ์ฌ์ฌ์ฉํ๊ฑฐ๋ ์ทจ์ํ ์ ์๋๋ก ์ ์ฅํจ |
์ธํฐํ๋ฆฌํฐ(Interpreter) | ํน์ ์ธ์ด์ ๋ฌธ๋ฒ ํํ์ ์ ์ํจ |
๋ฐ๋ณต์(Iterator) | ๋ด๋ถ๋ฅผ ๋ ธ์ถํ์ง ์๊ณ ์ ๊ทผ์ด ์ฆ์ ์ด๋ค ๊ฐ์ฒด์ ์์๋ฅผ ์์ฐจ์ ์ผ๋ก ์ ๊ธํ ์ ์๋ ๋์ผํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํจ |
์ค์ฌ์(Mediator) | ํ ์งํฉ์ฒด ์ํด์๋ ๊ฐ์ฒด๋ค์ ์ํธ์์ฉ์ ์บก์ํํ์ฌ ์๋ก์ด ๊ฐ์ฒด๋ก ์ ์ |
๋ฉ๋ฉํ (Memento) | ๊ฐ์ฒด๊ฐ ํน์ ์ํ๋ก ๋ค์ ๋๋์์ฌ ์ ์๋๋ก ๋ด๋ถ ์ํ๋ฅผ ์ค์ฒดํ |
์ต์๋ฒ(Observer) | ๊ฐ์ฒด ์ํ๊ฐ ๋ณํ ๋ ๊ด๋ จ ๊ฐ์ฒด๋ค์ด ๊ทธ ๋ณํ๋ฅผ ํต์ง๋ฐ๊ณ ์๋์ผ๋ก ๊ฐฑ์ ๋ ์ ์๊ฒ ํจ |
์ํ(State) | ๊ฐ์ฒด์ ์ํ์ ๋ฐ๋ผ ๋์ผํ ๋์์ ๋ค๋ฅด๊ฒ ์ฒ๋ฆฌํด์ผํ ๋ ์ฌ์ฉ |
์ ๋ต(Strategy) | ๋์ผ ๊ณ์ด์ ์๊ณ ๋ฆฌ์ฆ๊ตฐ์ ์ ์ํ๊ณ ์บก์ํํ์ฌ ์ํธ๊ตํ์ด ๊ฐ๋ฅํ๋๋ก ํจ |
ํ ํ๋ฆฟ ๋ฉ์๋(Template Method) | ์์ ํด๋์ค๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ณจ๊ฒฉ๋ง์ ์์ฑํ๊ณ ๊ตฌ์ฒด์ ์ธ ์ฒ๋ฆฌ๋ ์๋ธํด๋์ค๋ก ์์ํจ |
๋ฐฉ๋ฌธ์(Visitor) | ๊ฐ์ฒด์ ์์์ ๋ํด ์ํํ ์ฐ์ฐ์ ๋ถ๋ฆฌํ์ฌ ๋ณ๋์ ํด๋์ค๋ก ๊ตฌ์ฑํจ |
https://4z7l.github.io/2020/12/25/design_pattern_GoF.html
https://rhea31.gitbook.io/blog/development/more/undefined/whatisit
https://leveloper.tistory.com/157
'CS > Design Pattern' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์] SOLID๋? (3) | 2023.05.23 |
---|---|
[Design Pattern] DDD(๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ)๋? (0) | 2022.10.26 |
[ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์] ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ด๋? (0) | 2022.10.01 |
[Design Pattern] TDD(ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ) (0) | 2022.07.04 |
[ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์] OOP์ FP (0) | 2022.07.03 |
- Total
- Today
- Yesterday
- fp
- ๋ ์์ปฌ ํ๊ฒฝ
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
- map
- Baekjoon
- ์๋ฐ
- ๋ฐฑ์ค
- JavaScript
- ์ฝ๋ฉํ ์คํธ
- ์ ์ญ ๋ณ์
- ์๋ฐ์คํฌ๋ฆฝํธ
- ํ๋กํ ์ฝ
- ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ
- ์ด์์ฒด์
- ์๊ณ ๋ฆฌ์ฆ
- ๋ฐฑ์ค javascript
- ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ deep dive
- ํฌํฌ์ธํฐ
- ํ๋กํผํฐ
- ๋คํธ์ํฌ
- ๋์์ธ ํจํด
- git
- ์นด์นด์ค ์ธํด
- 2019 ์นด์นด์ค ๊ฐ๋ฐ์ ๊ฒจ์ธ ์ธํด
- ํ๋ก๊ทธ๋๋จธ์ค
- ์ด๋ถํ์
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
- TDD
- http
- ๋ฐฑ์ค node.js
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |