ํฌ์ŠคํŠธ

๐ŸŒ’ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋””์ž์ธ ํŒจํ„ด

๐Ÿ’ซ Q


  • ์•Œ๊ณ  ์žˆ๊ฑฐ๋‚˜ ์จ ๋ณธ ๋””์ž์ธ ํŒจํ„ด์ด ์žˆ๋‹ค๋ฉด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.
  • ๋””์ž์ธ ํŒจํ„ด์ด ๋ญ”๊ฐ€์š”?
  • ์‹ฑ๊ธ€ํ†ค์ด ๋ญ”๊ฐ€์š”?
  • ์˜ต์ €๋ฒ„ ํŒจํ„ด์ด ๋ญ”๊ฐ€์š”?

๐Ÿ’ซ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋””์ž์ธ ํŒจํ„ด


  • S/W ๊ฐœ๋ฐœ์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•œ ์†”๋ฃจ์…˜/ํ•ด๊ฒฐ์ฑ…
  • ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹
  • ๊ทธ๋Œ€๋กœ ์“ฐ๊ธฐ๋ณด๋‹ค๋Š” ์ƒํ™ฉ์— ๋งž๊ฒŒ (์•Œ์ž˜๋”ฑํ•˜๊ฒŒ)
  • ๋Œ€ํ‘œ์ ์œผ๋กœ ๊ตฌ์ฒดํ™”๋œ ๋””์ž์ธ ํŒจํ„ด์€ GoF(Gang of Four)์—์„œ ์ œ์‹œํ•œ ์ด 23๊ฐœ์˜ ํŒจํ„ด์ด ์žˆ์Œ

๐Ÿซง ๋ชฉ์ ์— ๋”ฐ๋ฅธ ๋ถ„๋ฅ˜

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

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


  • ์ด๋ฆ„ : ์˜๋ฏธ ์žˆ๋Š” ํŒจํ„ด ์‹๋ณ„์ž
  • ๋ฌธ์ œ ๊ธฐ์ˆ 
  • ํ•ด๊ฒฐ์ฑ… ๊ธฐ์ˆ  : ์™„์ „ํ•œ ์„ค๊ณ„๊ฐ€ ์•„๋‹ˆ๋ผ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ์‹คํ˜„๋  ์ˆ˜ ์žˆ๋Š” ์„ค๊ณ„ ํ•ด๊ฒฐ์ฑ…์„ ์œ„ํ•œ ํ…œํ”Œ๋ฆฟ
  • ๊ฒฐ๋ก  : ํŒจํ„ด์„ ์ ์šฉํ•œ ๊ฒฐ๊ณผ์™€ ํŠธ๋ ˆ์ด๋“œ ์˜คํ”„

๐Ÿ’ซ Ref


์ด ๊ธฐ์‚ฌ๋Š” ์ €์ž‘๊ถŒ์ž์˜ CC BY 4.0 ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.