Design Pattern

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

  • Gang of Four

    • Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides ๋ผ๋Š” ๋„ค๋ช…์˜ ์ €์ž๋ฅผ ๋œปํ•จ

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

๊ฐ์ฒด์ง€ํ–ฅ ์›์น™

  • ๋ฐ”๋€Œ๋Š” ๋ถ€๋ถ„์€ ์บก์Аํ™”ํ•œ๋‹ค

  • ์ƒ์†๋ณด๋‹ค๋Š” ๊ตฌ์„ฑ์„ ํ™œ์šฉํ•œ๋‹ค

  • ๊ตฌํ˜„๋ณด๋‹ค๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ๋งž์ถฐ์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•œ๋‹ค

  • ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๊ฐ์ฒด ์‚ฌ์ด์—์„œ๋Š” ๊ฐ€๋Šฅํ•˜๋ฉด ๋А์Šจํ•œ ๊ฒฐํ•ฉ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค

  • ํด๋ž˜์Šค๋Š” ํ™•์žฅ์—๋Š” ์—ด๋ ค ์žˆ์–ด์•ผ ํ•˜์ง€๋งŒ ๋ณ€๊ฒฝ์—๋Š” ๋‹ซํ˜€์žˆ์–ด์•ผ ํ•œ๋‹ค(OCP)

  • ์ถ”์ƒํ™”๋œ ๊ฒƒ์— ์˜์กดํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  ๊ตฌ์ƒ ํด๋ž˜์Šค์— ์˜์กดํ•˜์ง€ ์•Š๊ฒŒ ๋งŒ๋“ ๋‹ค.

์ƒ์„ฑ ํŒจํ„ด(Creational Patterns)

  • ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์ดˆ๊ธฐํ™”์— ๊ด€๋ จ๋œ ํŒจํ„ด

  • ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹์„ ์ถ”์ƒํ™”

  • ์ฃผ์š” ํŒจํ„ด: Singleton, Factory Method, Abstract Factory, Builder, Prototype

๊ตฌ์กฐ ํŒจํ„ด(Structural Patterns)

  • ํด๋ž˜์Šค๋‚˜ ๊ฐ์ฒด๋ฅผ ํ•ฉ์„ฑํ•˜์—ฌ ๋” ํฐ ๊ตฌ์กฐ๋กœ ๋งŒ๋“œ๋Š” ํŒจํ„ด

  • ํด๋ž˜์Šค์™€ ๊ฐ์ฒด๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ๋”ํฐ ๊ตฌ์กฐ๋กœ ๋งŒ๋“ฆ

  • ์ฃผ์š” ํŒจํ„ด: Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy

ํ–‰๋™ ํŒจํ„ด(Behavioral Paterrns)

  • ๊ฐ์ฒด ๊ฐ„์˜ ํ†ต์‹ ๊ณผ ์ฑ…์ž„์„ ๋ถ„์‚ฐํ•˜๋Š” ํŒจํ„ด

  • ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๊ฐ์ฒด ๊ฐ„์˜ ์ฑ…์ž„์„ ๋ถ„๋ฆฌ

  • ์ฃผ์š” ํŒจํ„ด: Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, Visitor

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

ํŒฉํ† ๋ฆฌ ํŒจํ„ด

  • ๊ฐ์ฒด ์ƒ์„ฑ์„ ์บก์Аํ™”ํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด

  • ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌํ•˜์—ฌ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณต

  • ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์„ ์„œ๋ธŒํด๋ž˜์Šค์—์„œ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ํŠน์ง•

  • ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ณ„๋„ ๋„๊ตฌ๋ฅผ ์ œ๊ณต

์‹ฑ๊ธ€ํ†ค ํŒจํ„ด

  • ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ์„ ๊ฐ–๋„๋ก ๋ณด์žฅ

ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ํŒจํ„ด

  • ๊ฐ์ฒด ์ƒ์„ฑ์„ ์บก์Аํ™”

  • ๊ฐ์ฒด ์ƒ์„ฑ์„ ์„œ๋ธŒ ํด๋ž˜์Šค์—์„œ ๊ฒฐ์ •ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ

๋นŒ๋” ํŒจํ„ด(Builder Pattern)

  • ๋ณต์žกํ•œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํŒจํ„ด

  • ๊ฐ์ฒด ์ƒ์„ฑ์˜ ๋‹จ๊ณ„๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ณต์žก์„ฑ์„ ํ•ด๊ฒฐ

  • ๊ฐ์ฒด์˜ ์ƒ์„ฑ ๊ณผ์ •์„ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ์กฐํ•ฉ

๊ตฌ์กฐ ํŒจํ„ด

Facade ํŒจํ„ด

  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์„œ๋ธŒ์‹œ์Šคํ…œ์ด๋‚˜ ๋ณต์žกํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋‹จ์ˆœํ™”

  • ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋” ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ํŒจํ„ด

  • ๋ณต์žกํ•œ ์‹œ์Šคํ…œ์„ ๋‹จ์ˆœํ™” ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ž˜ํ•‘

  • ์—ฌ๋Ÿฌ ์„œ๋ธŒ์‹œ์Šคํ…œ์„ ์กฐํ•ฉํ•ด์„œ ๋ญ”๊ฐ€ ๋™์ž‘์„ ๋งŒ๋“ค๊ธฐ์—” ๋ณต์žกํ•ด์ง„๋‹ค. ์ด๋Ÿด ๋•Œ Facade ํŒจํ„ด์„ ์‚ฌ์šฉ

  • ๋ณต์žกํ•œ ์—ฌ๋Ÿฌ ์„œ๋ธŒ์‹œ์Šคํ…œ์„ ์ด์šฉํ•ด์„œ ์˜คํผ๋ ˆ์ด์…˜์„ ๋งŒ๋“ค ๋•Œ ํŒŒ์‚ฌ๋“œ ํŒจํ„ด์„ ์“ด๋‹ค.

Proxy ํŒจํ„ด

  • ๊ฐ์ฒด์˜ ์ ‘๊ทผ์ด๋‚˜ ์กฐ์ž‘์„ ์ค‘๊ฐ„์—์„œ ์ œ์–ดํ•˜๊ฑฐ๋‚˜ ๋ณด์กฐํ•  ๋•Œ ์‚ฌ์šฉ

  • ๊ฐ์ฒด์˜ ๋Œ€๋ฆฌ์ž๋‚˜ ๋Œ€๋ณ€์ž ์—ญํ• ์„ ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉ

  • ์‹ค์ œ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์ค‘๊ฐ„์—์„œ ์ œ์–ดํ•˜๊ฑฐ๋‚˜ ์ค‘๊ฐ„์—์„œ ๋ถ€๊ฐ€์ ์ธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํŒจํ„ด

  • ์ค‘๊ฐ„์— ๋Œ€๋ฆฌ์ž๊ฐ€ ๋‚€ ํ˜•ํƒœ

  • ์ค‘๊ฐ„์—์„œ ํ•˜๋Š” ์ผ์€ ์—†์ง€๋งŒ ์–ด๋–ค ๋™์ž‘์— ๋Œ€ํ•ด์„œ ์œ„์ž„ ๋ฐ›์€ ๊ฐ์ฒด์— ์ „๋‹ฌ

  • ๋กœ๊น… ๋ฐ ์†๋„ ์ธก์ •, ์ ‘๊ทผ ์ œ์–ด ๋“ฑ ๋ถ€๊ฐ€์ ์ธ ๋ณ„๋„ ๋™์ž‘์„ ํ• ๋•Œ ์‚ฌ์šฉ

ํ–‰๋™ ํŒจํ„ด

์ „๋žต ํŒจํ„ด(Strategy Pattern)

  • ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‚˜ ํ–‰์œ„๋ฅผ ์ •์˜ํ•˜๊ณ , ๊ฐ๊ฐ์„ ์บก์Аํ™”

  • ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ์˜ํ–ฅ์„ ์ตœ์†Œํ™”

  • ๋™์ ์œผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ ํƒ

  • ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‚˜ ํ–‰์œ„(์ „๋žต)์„ ์ฃผ์ž…ํ•˜์—ฌ ๊ต์ฒดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ

์˜ต์ €๋ฒ„ ํŒจํ„ด

  • ์–ด๋–ค ๊ฐ์ฒด์˜ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ์ข…์† ๊ฐ์ฒด๋“ค์ด ์ž๋™์œผ๋กœ ์•Œ๋ฆผ์„ ๋ฐ›๋Š”๋‹ค.

  • ๊ฐ์ฒด๋“ค์—๊ฒŒ ์•Œ๋ฆฌ๊ธฐ

Last updated