GoF์˜ ๋””์ž์ธ ํŒจํ„ด, ์ ์‘์ž ํŒจํ„ด์— ๋Œ€ํ•ด ์•Œ์•„๋ณธ๋‹ค.

ํ•ด๋‹น ๊ธ€์€, ๋‹ค์Œ์˜ ์ฝ”๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์š”์•ฝ

  • ์ผ์ƒ์†์—์„œ ์‚ฌ์šฉํ•˜๋Š” Adapter์ฒ˜๋Ÿผ, ํŠน์ • ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์›ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•จ
  • ์ด์ „ ํด๋ž˜์Šค์˜ interface๋ฅผ ๊ทธ๋Œ€๋กœ ๋‘” ์ฑ„๋กœ, ๋ณ€ํ™˜ํ•˜์—ฌ ๋‹ค๋ฅธ ์ชฝ์—์„œ๋„ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
  • ํด๋ž˜์Šค์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ํ˜•ํƒœ๋กœ ์ ์‘์‹œํ‚ด
  • ์„œ๋กœ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ–๋Š” ํด๋ž˜์Šค๋ฅผ ํ•จ๊ป˜ ๋™์ž‘์‹œํ‚ด

์˜ˆ์‹œ

  • ์‚ฌ์šฉ์ž๋Š” ๋ฐ˜๋ ค ๋™๋ฌผ์„ ํ‚ค์šด๋‹ค (์‚ฌ์šฉํ•œ๋‹ค)
  • ๊ทธ๋Ÿฐ๋ฐ ์šฐ๋ฆฌ๊ฐ€ ์ด์ „์— ๋งŒ๋“ค์–ด๋†“์•˜๋˜ Tiger๋ผ๋Š” ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค.
  • ์ด๋…€์„ ์—ญ์‹œ ์ƒˆ๋กญ๊ฒŒ ๋งŒ๋“  animal interface์— ์†Œ์†์‹œํ‚ค๊ณ  ์‹ถ๋‹ค.
  • ๊ทธ๋Ÿฌ์ž๊ณ  Tiger๋ฅผ ๋ณ€๊ฒฝํ•˜์ž๋‹ˆ ์ผ์ด ๋„ˆ๋ฌด ์ปค์ง„๋‹ค.

  • ์ด๋Ÿฐ ๊ฒฝ์šฐ Adapter ํŒจํ„ด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • TigerAdapter๋ผ๋Š” ๊ตฌ์กฐ์ฒด๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค๊ณ  Animal์„ ์ฑ„ํƒํ•œ๋‹ค.
  • TigerAdapter ๋‚ด๋ถ€์—๋Š” Tiger ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์›ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ๋งž๋Š” ๊ฐ’์„ ์„ธํŒ…ํ•ด์ฃผ๋ฉด ๋!
  • ์ฝ”๋“œ

๋‹ค๋ฅธ ์ด๋ฆ„

ํ™œ์šฉ์„ฑ

  • ๊ธฐ์กด ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€๋ฐ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋งž์ง€ ์•Š์„ ๋•Œ
  • ์ด๋ฏธ ๋งŒ๋“  ๊ฒƒ์„ ์žฌ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋‚˜, ์ด ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์„ ๋•Œ
  • ์ฑ…์—์„œ๋Š” ๋‹ค์ค‘ ์ƒ์†์„ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ๋ฅผ ๋งํ•˜๊ณ  ์žˆ์œผ๋‚˜, ํ˜„์žฌ๋กœ์„œ๋Š” ๊ฐ์ฒด์— ๋Œ€ํ•ด์„œ๋งŒ ์ ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ๊ฐํ•ด์•ผ ํ•œ๋‹ค.
    • ์ฃฝ์Œ์˜ ๋‹ค์ด์•„๋ชฌ๋“œ ๋ฌธ์ œ

์ฐธ์—ฌ์ž

  • Target(Animal)
  • Client(User)
  • Adaptee(Tiger)
  • Adapter(TigerAdapter)

ํ˜‘๋ ฅ ๋ฐฉ๋ฒ•

  • ์‚ฌ์šฉ์ž๋Š” ์ ์‘์ž์— ํ•ด๋‹นํ•˜๋Š” ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค์— ์—ฐ์‚ฐ์„ ํ˜ธ์ถœํ•œ๋‹ค.
  • ์ ์‘์ž๋Š” ํ•ด๋‹น ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ ์‘ ๋Œ€์ƒ์ž์˜ ์—ฐ์‚ฐ์„ ํ˜ธ์ถœํ•œ๋‹ค.

๊ด€๋ จ ํŒจํ„ด๊ณผ ์ฐจ์ด์ 

  • ๊ฐ€๊ต(10. Bridge) ํŒจํ„ด๊ณผ ์œ ์‚ฌํ•˜๋‹ค.
  • ํ•˜์ง€๋งŒ ์‚ฌ์šฉ ๋ชฉ์ ์ด ๋‹ค๋ฅด๋‹ค.
  • 09. Adapter: ์กด์žฌํ•˜๋Š” ๊ฐ์ฒด์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ณ€๊ฒฝ
  • 10. Bridge: ๊ตฌํ˜„๊ณผ ์ถ”์ƒ ๊ฐœ๋…์„ ๋ถ„๋ฆฌ, ๊ทธ ๊ฒฐ๊ณผ๋กœ ํ™•์žฅ์„ฑ์„ ๋†’ํžˆ๊ธฐ ์œ„ํ•จ
  • 12. Decorator: ์ธํ„ฐํŽ˜์ด์Šค ๋ณ€๊ฒฝ ์—†์ด ์ƒˆ๋กœ์šด ํ–‰๋™ ์ถ”๊ฐ€ ๊ฐ€๋Šฅํ† ๋กํ•จ
  • 15. Proxy: ๋‹ค๋ฅธ ๊ฐ์ฒด์— ๋Œ€ํ•œ ๋Œ€๋ฆฌ์ธ ์—ญํ• ์„ ์ˆ˜ํ–‰, ํ•˜์ง€๋งŒ ์ธํ„ฐํŽ˜์ด์Šค ๋ณ€๊ฒฝ ์ฑ…์ž„์€ ์—†์Œ

Reference