ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋””์ž์ธ ํŒจํ„ด์ด๋ž€?

๋””์ž์ธ ํŒจํ„ด์€ ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™์˜ ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„์—์„œ ๊ณตํ†ต์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ž์ฃผ ์“ฐ์ด๋Š” ์„ค๊ณ„ ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•œ ํŒจํ„ด์ž…๋‹ˆ๋‹ค.

๋ชจ๋“ˆ์˜ ์„ธ๋ถ„ํ™”๋œ ์—ญํ• ์ด๋‚˜ ๋ชจ๋“ˆ๋“ค ๊ฐ„์˜ ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ ๋ฐฉ์‹์„ ์„ค๊ณ„ํ• ๋•Œ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ์ „ํ˜•์ ์ธ ํ•ด๊ฒฐ ๋ฐฉ์‹์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ, ๋””์ž์ธ ํŒจํ„ด์€ ํ•œ ํŒจํ„ด์— ๋ณ€ํ˜•์„ ๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์–ด๋– ํ•œ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•˜๋ฉด ๋‹ค๋ฅธ ํŒจํ„ด์œผ๋กœ ๋ณ€ํ˜•๋˜๋Š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

*ํŒจํ„ด : ๋น„์Šทํ•˜๊ฑฐ๋‚˜ ๋™์ผํ•œ ์–‘์‹ ๋˜๋Š” ์œ ํ˜•๋“ค์ด ๋ฐ˜๋ณต๋˜์–ด ๋‚˜ํƒ€๋‚จ, ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ์ฑ…๋„ ๋™์ผํ•œ ์œ ํ˜•์ด๋‚˜ ์–‘์‹์„ ํ†ตํ•ด ์‰ฝ๊ฒŒ ์ฐพ์Œ

 

๋””์ž์ธ ํŒจํ„ด์˜ ์žฅ๋‹จ์ 

  • ์žฅ์  : ๊ฐœ๋ฐœ์˜ ํšจ์œจ์„ฑ, ์œ ์ง€๋ณด์ˆ˜์„ฑ, ์šด์šฉ์„ฑ์ด ๋†’์•„์ง€๋ฉฐ ํ”„๋กœ๊ทธ๋žจ์˜ ์ตœ์ ํ™”๊ฐ€ ๊ฐ€๋Šฅ(๋ถˆํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค ๋‚ญ๋น„ ๋ฐฉ์ง€)
  • ๋‹จ์  : ์ดˆ๊ธฐ ํˆฌ์ž ๋น„์šฉ์˜ ๋ถ€๋‹ด

 

๋””์ž์ธ ํŒจํ„ด์˜ ๊ตฌ์„ฑ ์š”์†Œ

  • 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. ๋ฒ”์œ„์— ๋”ฐ๋ผ ๋ถ„๋ฅ˜

ํŒจํ„ด์„ ์ฃผ๋กœ ํด๋ž˜์Šค์— ์ ์šฉํ•˜๋Š”์ง€, ๊ฐ์ฒด์— ์ ์šฉํ•˜๋Š”์ง€ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์œ ํ˜• ์„ค๋ช…
ํด๋ž˜์Šค ํด๋ž˜์Šค์™€ ์„œ๋ธŒํด๋ž˜์Šค ๊ฐ„์˜ ๊ด€๋ จ์„ฑ์„ ๋‹ค๋ฃจ๊ณ , ์ฃผ๋กœ ์ƒ์†์„ ํ†ตํ•ด ๊ด€๋ จ๋˜๋ฉฐ, ์ปดํŒŒ์ผ ํƒ€์ž„์— ์ •์ ์œผ๋กœ ๊ฒฐ์ •
๊ฐ์ฒด ๊ฐ์ฒด ๊ฐ„์˜ ๊ด€๋ จ์„ฑ์„ ๋‹ค๋ฃจ๊ณ , ๋Ÿฐํƒ€์ž„์— ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋Š” ๋™์ ์ธ ์„ฑ๊ฒฉ์„ ๊ฐ€์ง

 

๋””์ž์ธ ํŒจํ„ด ๋ถ„๋ฅ˜ํ‘œ

์ถœ์ฒ˜ : https://4z7l.github.io/2020/12/25/design_pattern_GoF.html

 

์ƒ์„ฑ ํŒจํ„ด

์ƒ์„ฑ ํŒจํ„ด์€ ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ๊ด€๋ จ๋œ ํŒจํ„ด์œผ๋กœ, ๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค ๊ณผ์ •์„ ์ถ”์ƒํ™” ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์ฐธ์กฐ ๊ณผ์ •์„ ์บก์Šํ™”ํ•˜์—ฌ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ๋˜์–ด๋„ ํ”„๋กœ๊ทธ๋žจ ๊ตฌ์กฐ์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋„๋ก ํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์— ์œ ์—ฐ์„ฑ์„ ๋”ํ•ด์ค๋‹ˆ๋‹ค.

- ์ƒ์„ฑ ํด๋ž˜์Šค ํŒจํ„ด์€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ผ๋ถ€๋ฅผ ์„œ๋ธŒํด๋ž˜์Šค๊ฐ€ ๋‹ด๋‹นํ•˜๋„๋ก ํ•จ

- ์ƒ์„ฑ ๊ฐ์ฒด ํŒจํ„ด์€ ๊ฐ์ฒด ์ƒ์„ฑ์„ ๋‹ค๋ฅธ ๊ฐ์ฒด์—๊ฒŒ ์œ„์ž„

 

์ด๋ฆ„ ์˜๋„
์ถ”์ƒ ํŒฉํ† ๋ฆฌ(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

 

[Design Pattern] GoF(Gang of Four) ๋””์ž์ธ ํŒจํ„ด - HERSTORY

๋””์ž์ธ ํŒจํ„ด์ด๋ž€ ๋””์ž์ธ ํŒจํ„ด์€ ๋ชจ๋“ˆ์˜ ์„ธ๋ถ„ํ™”๋œ ์—ญํ• ์ด๋‚˜ ๋ชจ๋“ˆ๋“ค ๊ฐ„์˜ ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ ๋ฐฉ์‹์„ ์„ค๊ณ„ํ• ๋•Œ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ์ „ํ˜•์ ์ธ ํ•ด๊ฒฐ ๋ฐฉ์‹์„ ๋งํ•œ๋‹ค. ๋””์ž์ธ ํŒจํ„ด์„ ํ†ตํ•ด ์„ค๊ณ„ ๋ฌธ์ œ, ํ•ด๊ฒฐ ๋ฐฉ

4z7l.github.io

https://velog.io/@poiuyy0420/%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%A2%85%EB%A5%98

 

๋””์ž์ธ ํŒจํ„ด ๊ฐœ๋…๊ณผ ์ข…๋ฅ˜

๐Ÿ’ป ์šฐ๋ฆฌ๊ฐ€ ๊ธฐ๋Šฅ๊ตฌํ˜„์„ ํ•  ๋•Œ ์‹ค์ œ๋กœ ๋ชจ๋“  ์ผ€์ด์Šค๊ฐ€ ์ด๋ ‡๊ฒŒ ๋ฏธ๋ฆฌ ์•Œ๋ ค์ง„ ๋””์ž์ธํŒจํ„ด์— ๋“ค์–ด๋งž์„๋ฆฌ๋Š” ์—†์ง€๋งŒ, ๊ทธ๋ž˜๋„ ์–ด๋Š์ •๋„ '๊ต๊ณผ์„œ' ๊ฐ™์ด ์ •์˜๋˜๊ณ  ๋ถ„๋ฅ˜๋œ ํŒจํ„ด๋“ค์ด๋‹ค.์ด๋ฒˆ์—๋Š” ๊ฐœ๋…๊ณผ ์ข…๋ฅ˜

velog.io

https://rhea31.gitbook.io/blog/development/more/undefined/whatisit

 

๋””์ž์ธ ํŒจํ„ด์ด๋ž€? - blog

์ด๋Š” ๋จธ๋‚˜๋จผ ์˜›๋‚ . Erich Gamma, Ralpha Johnson, John Vlissides, Richard Helm ์ด 4๋ช…์˜ ๊ฐœ๋ฐœ์ž(GoF๋ผ๊ณ  ๋ถˆ๋ฆฌ์šฐ๋ฉฐ, the Gang of Four ์˜ ์ถ•์•ฝ์ด๋‹ค)๋“ค์ด ์งฌ์—์„œ ๋‚˜์˜จ ๋…ธํ•˜์šฐ๋“ค์„ ๊ฐœ๋ฐœ ๋ฐฉ์‹์œผ๋กœ ์ถ•์ฒ™, ์••์ถ•ํ•˜๊ณ  ๊ตฌ์ฒดํ™”ํ•˜

rhea31.gitbook.io

https://leveloper.tistory.com/157

 

[Design Pattern] ๋””์ž์ธ ํŒจํ„ด์˜ ์ดํ•ด์™€ GoF ํŒจํ„ด

 ๋””์ž์ธ ํŒจํ„ด(Design Pattern)์ด๋ž€ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ ํŠน์ • ๋งฅ๋ฝ์—์„œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๊ณ ์งˆ์ ์ธ ๋ฌธ์ œ๋“ค์ด ๋˜ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ›Œ๋ฅญํ•œ ํ•ด๊ฒฐ์ฑ…์ด๋‹ค.  ํŒจํ„ด์€ ๋น„์Šทํ•˜๊ฑฐ๋‚˜ ๋™์ผํ•œ ์–‘์‹

leveloper.tistory.com