๊ฐ์ฒด์ง€ํ–ฅ ๋ฐฉ๋ฒ•๋ก  (์ถœ์ œ๋นˆ๋„: ์ƒ)

๋นˆ์ถœํƒœ๊ทธ: ๊ฐ์ฒด ์šฉ์–ด, ๊ฐ์ฒด ๊ธฐ์ˆ , ๋””์ž์ธ ํŒจํ„ด, ๋Ÿผ๋ฐ”์šฐ

1. ๊ฐ์ฒด์ง€ํ–ฅ ๋ฐฉ๋ฒ•๋ก  ๊ฐœ์š”

๊ธฐ๋ณธ ๊ฐœ๋…

  • ํ˜„์‹ค์˜ ๊ฐœ์ฒด๋“ค์„ ๋””์ง€ํ„ธ ์„ธ๊ณ„์˜ ๊ฐ์ฒด๋กœ ํ‘œํ˜„
  • ํŠน์„ฑ์€ ์†์„ฑ์œผ๋กœ ํ‘œํ˜„, ํŠน์„ฑ๊ณผ ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ์„ ๋ฉ”์†Œ๋“œ๋กœ ํ‘œํ˜„

์žฅ๋‹จ์ 

์žฅ์ :

  • ํ™•์žฅ์„ฑ
  • ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด์„ฑ
  • ๊ฐœ๋ฐœ ์†๋„ ์ƒ์Šน
  • ๊ทœ๋ชจ๊ฐ€ ํฐ ํ”„๋กœ๊ทธ๋žจ๋„ ๋ฌด๋ฆฌ์—†์ด ๊ฐœ๋ฐœ ๊ฐ€๋Šฅ

๋‹จ์ :

  • ๊ฐœ๋ฐœ์€ ์‰ฝ์ง€๋งŒ ๊ฐ์ฒด ์ž์ฒด์˜ ์„ค๊ณ„๊ฐ€ ์–ด๋ ค์›€
  • ์†๋„๊ฐ€ ๋А๋ ค์งˆ ์ˆ˜ ์žˆ์Œ

2. ๊ฐ์ฒด์ง€ํ–ฅ ๊ธฐ์ˆ ์˜ ๊ตฌ์„ฑ์š”์†Œ

  • ํด๋ž˜์Šค: ๊ฐ์ฒด ํƒ€์ž…์„ ์ •์˜ํ•˜๊ณ  ๊ตฌํ˜„ํ•˜๋Š” ํ‹€. C์–ธ์–ด์—์„  ๊ตฌ์กฐ์ฒด์™€ ๊ตฌ์กฐ์ฒด๋ฅผ ์—ฐ์‚ฐํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋ฌถ์–ด์„œ ๋ฐœ์ „์‹œํ‚จ ๊ฒƒ
  • ๊ฐ์ฒด: ํด๋ž˜์Šค์— ์˜ํ•ด ๊ตฌํ˜„๋œ ๋Œ€์ƒ๋“ค
  • ์ธ์Šคํ„ด์Šค: ํŠน์ • ํด๋ž˜์Šค์˜ ๊ฐ์ฒด
  • ๋ฉ”์„ธ์ง€: ์ธํ„ฐํŽ˜์ด์Šค. ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ ํ†ตํ•ด ๋ฉ”์†Œ๋“œ ์ˆ˜ํ–‰ ์‹œ์ž‘
  • ๋ฉ”์†Œ๋“œ: ์ˆ˜ํ–‰ํ•ด์•ผํ•  ์—ฐ์‚ฐ์„ ์ •์˜. C์–ธ์–ด์˜ ํ•จ์ˆ˜์™€ ๊ฐ™์Œ

3. ๊ฐ์ฒด์ง€ํ–ฅ ๊ธฐ์ˆ 

ํ•ต์‹ฌ ๊ฐœ๋…

  • ์บก์Аํ™”: ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•œ ์†์„ฑ๊ณผ ๋ฉ”์†Œ๋“œ๋ฅผ ๋ฌถ์Œ. ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋‹จ์ˆœํ•ด์ง€๊ณ  ์žฌ์‚ฌ์šฉ์ด ์šฉ์ดํ•ด์ง
  • ์ •๋ณด์€๋‹‰: ์™ธ๋ถ€์˜ ์˜ํ–ฅ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•˜๋Š” ๊ฒƒ. ์บก์Аํ™”์˜ ๊ฐ€์žฅ ํฐ ๋ชฉ์ ์ด๋ฉฐ, ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ๊ฐ์ถ”๋Š” ๊ฒƒ
  • ์ถ”์ƒํ™”: ์ƒ์œ„ํด๋ž˜์Šค๋Š” ํ•˜์œ„ํด๋ž˜์Šค ๊ตฌํ˜„์„ ์œ„ํ•œ ํ‹€์„ ์ œ๊ณต. ํ˜„์‹ค์„ธ๊ณ„๋ฅผ ๋ณด๋‹ค ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ‘œํ˜„
  • ์ƒ์†: ์ƒ์œ„ ํด๋ž˜์Šค ๋ฉค๋ฒ„๋ฅผ ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ๋ฌผ๋ ค๋ฐ›๋„๋ก ํ•˜๋Š” ๊ฒƒ. ์žฌ์‚ฌ์šฉํ•˜๊ณ  ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Œ
  • ๋‹คํ˜•์„ฑ: ์ƒ์†๋œ ์—ฌ๋Ÿฌ ํ•˜์œ„ ๊ฐ์ฒด๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ํ˜•ํƒœ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ฒŒ ํ•จ. ์˜ค๋ฒ„๋กœ๋”ฉ, ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๊ธฐ์ˆ . ๋‘˜ ์ด์ƒ์˜ ํด๋ž˜์Šค์—์„œ ๋™์ผํ•œ ๋ฉ”์„ธ์ง€์— ๋Œ€ํ•ด ์„œ๋กœ ๋‹ค๋ฅด๊ฒŒ ๋ฐ˜์‘ํ•จ

4. ๊ฐ์ฒด์ง€ํ–ฅ ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก 

๋Ÿผ๋ฐ”์šฐ(Rumbaugh)

  • ๋‹ค์–‘ํ•œ ๊ทธ๋ž˜ํ”ฝ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ๋ชจ๋ธ๋ง
  • ๊ฐ์ฒด, ๋™์ , ๊ธฐ๋Šฅ ๋ชจ๋ธ๋ง ์ˆœ์œผ๋กœ ์ง„ํ–‰
    • ๊ฐ์ฒด๋ชจ๋ธ๋ง(์ •๋ณด๋ชจ๋ธ๋ง): ๊ฐ์ฒด ๋‹ค์ด์–ด๊ทธ๋žจ์„ ํ™œ์šฉ
    • ๋™์  ๋ชจ๋ธ๋ง: ์ƒํƒœ, ํ™œ๋™ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ํ™œ์šฉ
    • ๊ธฐ๋Šฅ ๋ชจ๋ธ๋ง: ์ž๋ฃŒ ํ๋ฆ„๋„(DFD)๋ฅผ ํ™œ์šฉ

๊ธฐํƒ€ ๋ฐฉ๋ฒ•๋ก 

  • Booch: ๋ฏธ์‹œ์ (Micro) ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์™€ ๊ฑฐ์‹œ์ (Macro) ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ฌ์šฉ
  • Jacobson: ์‹œ๋‚˜๋ฆฌ์˜ค(Use-Case)๋ฅผ ํ™œ์šฉ
  • Coad์™€ Yourdon: E-R๋‹ค์ด์–ด๊ทธ๋žจ์„ ์‚ฌ์šฉ
  • Wirfs-Brock: ๋ถ„์„๊ณผ ์„ค๊ณ„๊ฐ„ ๊ตฌ๋ถ„์ด ์—†์Œ. ๊ณ ๊ฐ ๋ช…์„ธ์„œ๋ฅผ ํ‰๊ฐ€ํ•ด์„œ ์—ฐ์†์ ์œผ๋กœ ์ˆ˜ํ–‰

5. ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„์›์น™

  1. ๋‹จ์ผ ์ฑ…์ž„: ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์ด ํ•˜๋‚˜์˜ ๋ฌธ์ œ๋งŒ ํ•ด๊ฒฐํ•˜๋„๋ก ์„ค๊ณ„. ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„ ๋†’์€ ์‘์ง‘๋„
  2. ๊ฐœ๋ฐฉ ํ์‡„: ํ™•์žฅ์— ๋Œ€ํ•ด์„œ ๊ฐœ๋ฐฉ์ ์ด๋ฉฐ ์ˆ˜์ •์— ๋Œ€ํ•ด์„  ํ์‡„์ ์ด์–ด์•ผ ํ•จ
  3. ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜: ํ•˜์œ„ ํด๋ž˜์Šค๋Š” ์ƒ์œ„ ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ์ด ํ˜ธํ™˜๋จ. ์ƒ์œ„ ํด๋ž˜์Šค์˜ ์ œ์•ฝ์‚ฌํ•ญ์„ ์ค€์ˆ˜ํ•ด์•ผ ํ•จ
  4. ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ: ํ•˜๋‚˜์˜ ํฌ๊ด„์  ์ธํ„ฐํŽ˜์ด์Šค๋ณด๋‹ค ๋‹ค์ˆ˜์˜ ๊ตฌ์ฒด์  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์„ฑ. ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•„์•ผ ํ•จ
  5. ์˜์กด์„ฑ ๋’ค์ง‘๊ธฐ: ํ•˜์œ„ํด๋ž˜์Šค์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์ƒ์œ„ ํด๋ž˜์Šค์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋„๋ก ๊ตฌ์„ฑ

6. ๊ฐ์ฒด์ง€ํ–ฅ ํ…Œ์ŠคํŠธ

  • ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ(Thread-Based Testing): ํด๋ž˜์Šค๋“ค์˜ ์ง‘ํ•ฉ์„ ํ†ตํ•ฉ(ํ•˜ํ–ฅ์‹)ํ•ด๊ฐ€๋Š” ํ…Œ์ŠคํŠธ ๋ฐฉ์‹
  • ์‚ฌ์šฉ-๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ(Use-Based Testing): ํด๋ž˜์Šค๋“ค์„ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฒ€์‚ฌํ•˜๊ณ  ์ƒ์œ„ ํด๋ž˜์Šค์™€ ๊ฒฐํ•ฉ(์ƒํ–ฅ์‹)ํ•˜๋Š” ๋ฐฉ์‹
  • ๊ฒ€์ฆ๊ณผ ์‹œ์Šคํ…œ ํ…Œ์ŠคํŠธ: ์‚ฌ์šฉ์ž ์š”๊ตฌ๊ฐ€ ๊ฐ์ฒด์— ์ •ํ™•ํžˆ ๋ฐ˜์˜๋๋Š”์ง€ ๊ฒ€์‚ฌ

7. ๋””์ž์ธ ํŒจํ„ด

๊ฐœ์š”

  • ๋ฐ˜๋ณต์ ์ธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์„ค๊ณ„ ํŒจํ„ด์„ ์ผ๋ฐ˜ํ™”
  • GoF(Gang of Four)๊ฐ€ ์ œ์‹œ
  • ๊ตฌํ˜„ ๋‹จ๊ณ„์˜ ๋ฌธ์ œ์— ์‹ค์ œ๋กœ ์ ์šฉ ๊ฐ€๋Šฅ
  • ๊ธฐ๋Šฅ ํ–ฅ์ƒ์ด ์•„๋‹Œ ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ํ†ตํ•œ ๊ตฌ์กฐ ๋ณ€๊ฒฝ, ์ฝ”๋“œ ๊ฐ€๋…์„ฑ ๋“ฑ์— ์ง‘์ค‘

๊ตฌ์„ฑ ์š”์†Œ

  • ํŒจํ„ด๋ช…๊ณผ ๊ตฌ๋ถ„
  • ๋ฌธ์ œ ๋ฐ ๋ฐฐ๊ฒฝ
  • ์†”๋ฃจ์…˜
  • ์‚ฌ๋ก€
  • ๊ฒฐ๊ณผ
  • ์ƒ˜ํ”Œ์ฝ”๋“œ

ํŠน์ง•

  • ๊ตฌ์กฐ ํŒŒ์•…๊ณผ ์›ํ™œํ•œ ์˜์‚ฌ์†Œํ†ต
  • ๊ฐœ๋ฐœ์˜ ์ƒ์‚ฐ์„ฑ, ํšจ์œจ์„ฑ, ์žฌ์‚ฌ์šฉ์„ฑ, ํ™•์žฅ์„ฑ์ด ํ–ฅ์ƒ๋จ
  • ์ดˆ๊ธฐ๋น„์šฉ์ด ๋งŽ์ด ๋“ค๊ณ  ๊ฐ์ฒด์ง€ํ–ฅ ๊ฐœ๋ฐœ์—๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

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

  • Factorial Method: ์ƒ์œ„ํด๋ž˜์Šค์—์„œ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•˜๊ณ  ํ•˜์œ„ํด๋ž˜์Šค๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ• ์ง€ ๊ฒฐ์ •
  • Abstract Factory: ๊ด€๋ จ์žˆ๋Š” ์„œ๋ธŒํด๋ž˜์Šค๋ฅผ ๋ฌถ์–ด์„œ ํŒฉํ† ๋ฆฌ ํด๋ž˜์Šค๋กœ ๋งŒ๋“ค๊ณ  ๊ฐ์ฒด ์ƒ์„ฑ
  • Builder: ๋ณต์žกํ•œ ๊ฐ์ฒด ์ƒ์„ฑ์„ ๋‹จ๊ณ„๋ณ„๋กœ ๋ถ„๋ฅ˜
  • Prototype: ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒŒ ์•„๋‹Œ ๊ธฐ์กด์˜ ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌ
  • Singleton: ํด๋ž˜์Šค๊ฐ€ ์˜ค์ง ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ์„ ๊ฐ€์ง€๋„๋ก ํ•˜๋Š” ํŒจํ„ด

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

  • Adaptor: ์„œ๋กœ ๋‹ค๋ฅธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ€์ง„ ํด๋ž˜์Šค๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ
  • Bridge: ๋ณต์žกํ•˜๊ฒŒ ์„ค๊ณ„๋œ ํด๋ž˜์Šค๋ฅผ ๊ธฐ๋Šฅ๋ถ€์™€ ๊ตฌํ˜„๋ถ€๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์—ฐ๊ฒฐ
  • Composite: ๊ฐ์ฒด๋“ค์˜ ๊ด€๊ณ„๊ฐ€ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ๊ตฌ์„ฑ๋˜๊ณ  ๋‹จ์ผ๊ฐ์ฒด์™€ ๋ณตํ•ฉ๊ฐ์ฒด๋ฅผ ๋™์ผํ•˜๊ฒŒ ๋‹ค๋ฃธ
  • Decorator: ํด๋ž˜์Šค ๋ณ€๊ฒฝ ์—†์ด ์ฃผ์–ด์ง„ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€
  • Facade: ๋ณต์žกํ•œ ์„œ๋ธŒ์‹œ์Šคํ…œ์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋„๋ก ๋‹จ์ˆœํ™”๋œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณต
  • Flyweight: ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ ๊ณต์œ ๋ฅผ ๊ทน๋Œ€ํ™”
  • Proxy: ๋Œ€๋ฆฌ์ž๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•จ์œผ๋กœ์จ ์›๋ณธ ๊ฐ์ฒด์˜ ์ƒ์„ฑ ์—ฐ๊ธฐ, ์›๊ฒฉ ์ œ์–ด, ์ ‘๊ทผ ์ œ์–ด ๋“ฑ์„ ๊ฒฐ์ •

ํ–‰์œ„(Behavioral) ํŒจํ„ด

  • Interpreter: ์–ธ์–ด์˜ ๋ฌธ(Statement)๋ฅผ ํ‰๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ทœ์ •
  • Template Method: ์ƒ์œ„ ํด๋ž˜์Šค์—์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋ผˆ๋Œ€๋ฅผ ์ •์˜ํ•˜๊ณ  ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ๊ตฌ์ฒด์ ์ธ ๋‹จ๊ณ„๋ฅผ ์ •์˜
  • Chain of Responsibility: ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•ด ์ผ๋ จ์˜ ์ฒ˜๋ฆฌ ๊ฐ์ฒด๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐ
  • Command: ์š”์ฒญ์„ ๊ฐ์ฒด์˜ ํ˜•ํƒœ๋กœ ์บก์Аํ™”ํ•˜์—ฌ ๋ณต๊ตฌ ์ทจ์†Œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ
  • Iterator: ๋‚ด๋ถ€ ๊ตฌํ˜„์„ ๋…ธ์ถœ์‹œํ‚ค์ง€ ์•Š๊ณ  ์ง‘์•ฝ๋œ ๊ฐ์ฒด์— ์ ‘๊ทผ
  • Mediator: ๊ฐ์ฒด๊ฐ„์˜ ํ†ต์‹ ์ด ์ค‘์žฌ์ž๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ ธ ๊ฒฐํ•ฉ๋„๋ฅผ ๊ฐ์†Œ
  • Memento: ๋กค๋ฐฑ์„ ํ†ตํ•ด ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ์ด์ „ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฌ๋Š” ๊ธฐ๋Šฅ ์ œ๊ณต
  • Observer: ๊ฐ์ฒด์˜ ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ๊ด€์ฐฐํ•˜๊ณ  ๋ณ€ํ™”๊ฐ€ ์žˆ์„ ๋•Œ๋งˆ๋‹ค ๋“ฑ๋ก๋œ ์˜ต์ €๋ฒ„์— ํ†ต์ง€
  • State: ๊ฐ์ฒด์˜ ๋‚ด๋ถ€ ์ƒํƒœ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„
  • Strategy: ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ณ„๋„๋กœ ๋ถ„๋ฆฌ(์บก์Аํ™”)ํ•˜๋Š” ํŒจํ„ด
  • Visitor: ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ๋ถ„๋ฆฌํ•˜๊ณ  ํด๋ž˜์Šค ์ˆ˜์ • ์—†์ด ์ƒˆ๋กœ์šด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ถ”๊ฐ€