๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์ž๊ฒฉ์ฆ/์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ

[1 ๊ณผ๋ชฉ] GoF(Gangs of Four) ๋””์ž์ธ ํŒจํ„ด(Design Pattern)

by _silver 2025. 4. 9.

๐Ÿ“Œ ๊ด€๋ จ ๊ธฐ์ถœ๋ฌธ์ œ:

  • 2024๋…„ 2ํšŒ : GoF(Gangs of Four) ๋””์ž์ธ ํŒจํ„ด์—์„œ ์ƒ์„ฑ(Creational)ํŒจํ„ด์— ํ•ด๋‹นํ•˜๋Š” ๊ฒƒ์€?
  • 2024๋…„ 1ํšŒ : GoF(Gangs of Four) ๋””์ž์ธ ํŒจํ„ด์„ ์ƒ์„ฑ, ๊ตฌ์กฐ, ํ–‰๋™ ํŒจํ„ด์˜ ์„ธ ๊ทธ๋ฃน์œผ๋กœ ๋ถ„๋ฅ˜ํ•  ๋•Œ, ๊ตฌ์กฐ ํŒจํ„ด์ด ์•„๋‹Œ ๊ฒƒ์€?
โ˜‘๏ธ ์ƒ์„ฑ ํŒจํ„ด (Creational Patterns)
๊ฐ์ฒด ์ƒ์„ฑ ๋ฐฉ์‹์˜ ์œ ์—ฐ์„ฑ๊ณผ ํšจ์œจ์„ฑ์„ ์ œ๊ณต
  • ์‹ฑ๊ธ€ํ„ด (Singleton): ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ์กด์žฌํ•˜๋„๋ก ๋ณด์žฅ
  • ํŒฉํ† ๋ฆฌ ๋ฉ”์†Œ๋“œ (Factory Method): ๊ฐ์ฒด ์ƒ์„ฑ์„ ํ•˜์œ„ ํด๋ž˜์Šค์— ์œ„์ž„
  • ์ถ”์ƒ ํŒฉํ† ๋ฆฌ (Abstract Factory): ๊ด€๋ จ๋œ ๊ฐ์ฒด ์ง‘ํ•ฉ์„ ์ƒ์„ฑ (ํŒฉํ† ๋ฆฌ์˜ ํŒฉํ† ๋ฆฌ)
  • ๋นŒ๋” (Builder): ๋ณตํ•ฉ ๊ฐ์ฒด ์ƒ์„ฑ ๊ณผ์ •์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์œ ์—ฐํ•˜๊ฒŒ ์ƒ์„ฑ
  • ํ”„๋กœํ† ํƒ€์ž… (Prototype): ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ๋ณต์ œํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ฐ์ฒด ์ƒ์„ฑ
โ˜‘๏ธ ๊ตฌ์กฐ ํŒจํ„ด (Structural Patterns)
ํด๋ž˜์Šค๋‚˜ ๊ฐ์ฒด๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ๋” ํฐ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„
  • ์–ด๋Œ‘ํ„ฐ (Adapter): ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์—ฐ๊ฒฐ
  • ๋ธŒ๋ฆฌ์ง€ (Bridge): ๊ตฌํ˜„๊ณผ ์ถ”์ƒ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๋…๋ฆฝ์ ์œผ๋กœ ํ™•์žฅ
  • ์ปดํฌ์ง€ํŠธ (Composite): ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ๊ฐ์ฒด ๊ตฌ์„ฑ (์˜ˆ: ํด๋”/ํŒŒ์ผ)
  • ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ (Decorator): ๊ธฐ๋Šฅ์„ ๋™์ ์œผ๋กœ ์ถ”๊ฐ€
  • ํผ์‹ธ๋“œ (Facade): ๋ณต์žกํ•œ ์„œ๋ธŒ์‹œ์Šคํ…œ์„ ๊ฐ„๋‹จํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ฐ์‹ธ๊ธฐ
  • ํ”Œ๋ผ์ด ์›จ์ดํŠธ (Flyweight): ๊ณต์œ  ๊ฐ์ฒด๋กœ ๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ
  • ํ”„๋ก์‹œ (Proxy): ๋Œ€๋ฆฌ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์ ‘๊ทผ ์ œ์–ด
โ˜‘๏ธ ํ–‰์œ„ ํŒจํ„ด (Behavioral Patterns)
๊ฐ์ฒด ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ๊ณผ ์ฑ…์ž„ ๋ถ„์‚ฐ
  • ๊ฐ์‹œ์ž (Observer): ์ƒํƒœ ๋ณ€ํ™” ์‹œ ์ž๋™์œผ๋กœ ์•Œ๋ฆผ
  • ์ „๋žต (Strategy): ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์บก์Аํ™”ํ•˜๊ณ  ๊ต์ฒด ๊ฐ€๋Šฅ
  • ํ…œํ”Œ๋ฆฟ ๋ฉ”์„œ๋“œ (Template Method): ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ผˆ๋Œ€๋ฅผ ์ •์˜ํ•˜๊ณ  ์ผ๋ถ€ ๋‹จ๊ณ„๋ฅผ ์„œ๋ธŒํด๋ž˜์Šค๊ฐ€ ๊ตฌํ˜„
  • ๋ช…๋ น (Command): ์š”์ฒญ์„ ๊ฐ์ฒด๋กœ ์บก์Аํ™” (์˜ˆ: ์‹คํ–‰์ทจ์†Œ)
  • ์ฑ…์ž„ ์—ฐ์‡„ (Chain of Responsibility): ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด์—๊ฒŒ ์ „๋‹ฌ
  • ๋ฐ˜๋ณต์ž (Iterator): ์ปฌ๋ ‰์…˜ ๋‚ด๋ถ€ ํ‘œํ˜„์„ ๋…ธ์ถœํ•˜์ง€ ์•Š๊ณ  ์ˆœํšŒ
  • ์ค‘์žฌ์ž (Mediator): ๊ฐ์ฒด ๊ฐ„ ์ƒํ˜ธ์ž‘์šฉ์„ ์ค‘์žฌ์ž์—๊ฒŒ ์œ„์ž„
  • ๊ธฐ๋ก (Memento): ๊ฐ์ฒด ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ณต์›
  • ์ƒํƒœ (State): ๊ฐ์ฒด ์ƒํƒœ์— ๋”ฐ๋ผ ํ–‰๋™ ๋ณ€๊ฒฝ
  • ๋ฐฉ๋ฌธ์ž (Visitor): ๊ฐ์ฒด ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์—ฐ์‚ฐ ์ถ”๊ฐ€
  • ํ•ด์„์ž (Interpreter): ์–ธ์–ด์˜ ๋ฌธ๋ฒ•์„ ํด๋ž˜์Šค ๊ตฌ์กฐ๋กœ ํ‘œํ˜„