๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“š ์ „๊ณต ๊ณต๋ถ€/์†Œํ”„ํŠธ์›จ์–ด๊ณตํ•™

[์†Œํ”„ํŠธ์›จ์–ด๊ณตํ•™] 8์žฅ. ์„ค๊ณ„ ๊ฐœ๋…

8์žฅ. ์„ค๊ณ„ ๊ฐœ๋…

  • Design Process (์„ค๊ณ„ ํ”„๋กœ์„ธ์Šค)
    • SW ์„ค๊ณ„๋Š” ์š”๊ตฌ์‚ฌํ•ญ์ด SW๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์ฒญ์‚ฌ์ง„์œผ๋กœ ๋ณ€ํ™˜๋˜๋Š” ๋ฐ˜๋ณต์ ์ธ ๊ณผ์ •์ด๋‹ค.
    • ์ข‹์€ ๋””์ž์ธ์„ ์œ„ํ•œ 3๊ฐ€์ง€ ํŠน์„ฑ
      1. ๋ถ„์„๋ชจ๋ธ์— ํฌํ•จ๋œ ๋ชจ๋“  ๋ช…์‹œ์  ์š”๊ตฌ์‚ฌํ•ญ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋ฉฐ, ๊ณ ๊ฐ์ด ์›ํ•˜๋Š” ๋ชจ๋“  ์•”๋ฌต์  ์š”๊ตฌ์‚ฌํ•ญ์„ ์ˆ˜์šฉํ•ด์•ผ ํ•จ.
      2. ๊ฐœ๋ฐœ์ž์™€ ํ…Œ์Šคํ„ฐ ๋“ฑ์„ ์œ„ํ•ด ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ๊ฐ€์ด๋“œ๊ฐ€ ๋˜์–ด์•ผ ํ•จ.
      3. ๊ตฌํ˜„ ๊ด€์ ์—์„œ ๋ฐ์ดํ„ฐ, ๊ธฐ๋Šฅ ๋ฐ ํ–‰๋™ ์˜์—ญ์„ ๋‹ค๋ฃจ๋ฉด์„œ SW์˜ ์ „์ฒด์ ์ธ ๊ทธ๋ฆผ์„ ์ œ๊ณตํ•ด์•ผ ํ•จ.

๐Ÿ’ก Fundamental Design Concepts (๊ธฐ๋ณธ ์„ค๊ณ„ ๊ฐœ๋…)

  1. Abstraction - ์ถ”์ƒํ™” (๋ฐ์ดํ„ฐ,์ ˆ์ฐจ,๋™์ž‘)
  2. Architecture - ์•„ํ‚คํ…์ฒ˜ (SW์˜ ์ „๋ฐ˜์  ๊ตฌ์กฐ)
  3. Patterns - ํŒจํ„ด (๊ฒ€์ฆ๋œ ์„ค๊ณ„ ์†”๋ฃจ์…˜์˜ ๋ณธ์งˆ ์ „๋‹ฌ)
  4. Modularity - ๋ชจ๋“ˆํ™” (๋ฐ์ดํ„ฐ ๋ฐ ๊ธฐ๋Šฅ์˜ ๊ตฌํšํ™”) : divide & conquer
  5. Information hiding - ์ˆจ๊ธฐ๋Š” ์ •๋ณด (์ œ์–ด๋œ ์ธํ„ฐํŽ˜์ด์Šค) : error propagation
  6. Functional independence - ๊ธฐ๋Šฅ ๋…๋ฆฝ์„ฑ (high cohesion, low coupling)
  7. Refinement - ์ •๊ตํ•จ/๊ฐœ์„  (๋ชจ๋“  ์ถ”์ƒํ™”์— ๋Œ€ํ•œ ์„ธ๋ถ€์‚ฌํ•ญ) : elaboration
  8. Refactoring - ๋ฆฌํŒฉํ„ฐ๋ง (์„ค๊ณ„๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๋Š” ์žฌ๊ตฌ์„ฑ) : re-organization
  9. Design class - ์„ค๊ณ„ ํด๋ž˜์Šค (๊ตฌํ˜„๋  ์„ธ๋ถ€ ํด๋ž˜์Šค)

 

  • ๋””์ž์ธ ์ปจ์…‰ : ์ถ”์ƒํ™” (Abstraction)
    • ์ถ”์ƒํ™” ๋ ˆ๋ฒจ
    • ๊ฐ€์žฅ ๋†’์€ ๋ ˆ๋ฒจ์—์„œ, ํ•ด๊ฒฐ์ฑ…์€ ๋ฌธ์ œ ํ™˜๊ฒฝ์˜ ์–ธ์–ด๋ฅผ ์“ฐ๋Š” ๊ด‘๋ฒ”์œ„ํ•œ ์šฉ์–ด๋กœ ๋ช…์‹œ๋จ.
    • ๋” ๋‚ฎ์€ ๋ ˆ๋ฒจ์—์„œ๋Š” ์†”๋ฃจ์…˜์— ๋Œ€ํ•ด ๋ณด๋‹ค ์ž์„ธํ•œ ์„ค๋ช… ์ œ๊ณต
    • ์ ˆ์ฐจ์  ์ถ”์ƒํ™”(Procedural abstaction)๋Š” ํŠน์ •/์ œํ•œ๋œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ์ผ๋ จ์˜ ๋ช…๋ น์–ด
    • ๋ฐ์ดํ„ฐ ์ถ”์ƒํ™”๋Š” ๋ฐ์ดํ„ฐ ๊ฐœ์ฒด๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ชจ์Œ.
    • ํ–‰๋™ ์ถ”์ƒํ™” = ์ ˆ์ฐจ์  ์ถ”์ƒํ™” + ๋ฐ์ดํ„ฐ ์ถ”์ƒํ™”

  • ๋””์ž์ธ ์ปจ์…‰ : ์„ค๊ณ„ (Architecture)
    • SW ์•„ํ‚คํ…์ฒ˜๋Š” ๊ตฌ์„ฑ์š”์†Œ์˜ ๊ตฌ์กฐ, ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๋ฐฉ์‹, ๊ทธ๋ฆฌ๊ณ  ๊ตฌ์„ฑ์š”์†Œ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ด๋‹ค.
  • ๋””์ž์ธ ์ปจ์…‰ : ํŒจํ„ด (Patterns)
    • ํŒจํ„ด์ด ์ ์šฉ๋˜๋Š” ๋ฐฉ์‹์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋Š” ์–ด๋–ค ๋งฅ๋ฝ์ด๋‚˜ ํž˜ ์•ˆ์—์„œ ํŠน์ •ํ•œ design ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์„ค๊ณ„ ๊ตฌ์กฐ
    • ํŒจํ„ด์ด ํ˜„์žฌ ์ž‘์—…์— ์ ์šฉ ๊ฐ€๋Šฅํ•œ์ง€?
    • ํŒจํ„ด์„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€?
    • ์œ ์‚ฌํ•˜์ง€๋งŒ ๊ธฐ๋Šฅ์  ๋˜๋Š” ๊ตฌ์กฐ์ ์œผ๋กœ ๋‹ค๋ฅธ ํŒจํ„ด์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ์ง€์นจ์œผ๋กœ ํŒจํ„ด์ด ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š”์ง€?
  • ๋””์ž์ธ ์ปจ์…‰ : ๋ชจ๋“ˆํ™” (Modularity)
    • SW ์•„ํ‚คํ…์ฒ˜ ๋ฐ ์„ค๊ณ„ ํŒจํ„ด์€ ๋ชจ๋“ˆ์„ฑ์„ ๊ตฌํ˜„ํ•จ.
    • SW๋Š” ์ฃผ์†Œ์ง€์ • ๊ฐ€๋Šฅํ•œ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๋‚˜๋‰˜๋ฉฐ, ๋ฌธ์ œ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๊ธฐ ์œ„ํ•ด ํ†ตํ•ฉ๋œ ๋ชจ๋“ˆ์ด๋‹ค.
    • “Devide & Conquer” : ๋ถ„ํ•  ๋ฐ ์ •๋ณต
  • ๋””์ž์ธ ๊ฐœ๋… : ์ •๋ณด ์ˆจ๊ธฐ๊ธฐ (Information hiding)
    • ๋ชจ๋“ˆ์€ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ๋ถ€ํ„ฐ ์ˆจ๊ธฐ๋Š” ์„ค๊ณ„ ๊ฒฐ์ •์œผ๋กœ ํŠน์ง•๋œ๋‹ค.
    • SW ๊ธฐ๋Šฅ์„ ๋‹ฌ์„ฑํ•˜๋Š” ๋ฐ์— ํ•„์š”ํ•œ ์ •๋ณด๋งŒ ์„œ๋กœ ํ†ต์‹ ํ•˜๋Š” ๋…๋ฆฝ ๋ชจ๋“ˆ์ง‘ํ•ฉ์„ ์ •์˜ → ํšจ๊ณผ์ ์ธ ๋ชจ๋“ˆํ™” ๋‹ฌ์„ฑ
    • ์ •๋ณด ์€๋‹‰์˜ ์‚ฌ์šฉ : ํ…Œ์ŠคํŠธ ์ค‘/ํ›„/์œ ์ง€๋ณด์ˆ˜ ์ค‘ ์ˆ˜์ •์ด ํ•„์š”ํ•  ๋•Œ, ์ˆ˜์ • ์ค‘์— ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜๊ฐ€ SW ๋‚ด์˜ ๋‹ค๋ฅธ ์œ„์น˜๋กœ ์ „ํŒŒ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋‚ฎ์Œ
    • why ?
      1. side effect (๋ถ€์ž‘์šฉ) ๊ฐ์†Œ
      2. ์ง€์—ญ ์„ค๊ณ„์˜ ์ „์—ญ ์˜ํ–ฅ์„ ์ œํ•œ
      3. ์ œ์–ด๋œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•œ ์†Œํ†ต ๊ฐ•์กฐ
      4. ์ „์—ญ ๋ฐ์ดํ„ฐ ์‚ฌ์šฉ ๊ธˆ์ง€
      5. ์บก์Šํ™”๋กœ ์ด์–ด์ง - ๊ณ ํ’ˆ์งˆ ์„ค๊ณ„์˜ ์†์„ฑ
      6. ๋” ๋†’์€ ํ’ˆ์งˆ์˜ SW ์ œ๊ณต
  • ๋””์ž์ธ ๊ฐœ๋… : ๊ธฐ๋Šฅ ๋…๋ฆฝ์„ฑ (Functional Independence)
    • ๋ชจ๋“ˆํ™”, ์ถ”์ƒํ™”, ์ •๋ณด ์€๋‹‰์˜ ์ง์ ‘์ ์ธ ๊ฒฐ๊ณผ
    • ๋…๋ฆฝ์„ฑ์€ ์‘์ง‘๋ ฅ๊ณผ ๊ฒฐํ•ฉ๋ ฅ์ด๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ์งˆ์  ๊ธฐ์ค€์œผ๋กœ ํ‰๊ฐ€๋จ.
      • Cohesion - ์‘์ง‘๋ ฅ : ๋ชจ๋“ˆ์˜ ์ƒ๋Œ€์  ๊ธฐ๋Šฅ ๊ฐ•๋„. ๋ชจ๋“ˆ์ด ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ๋งŒ ์ˆ˜ํ–‰ํ•˜๋Š” ์ •๋„
      • Coupling - ๊ฒฐํ•ฉ๋ ฅ : ๋ชจ๋“ˆ ๊ฐ„์˜ ์ƒ๋Œ€์  ์ƒํ˜ธ์˜์กด์„ฑ. ๋ชจ๋“ˆ์ด ๋‹ค๋ฅธ ๋ชจ๋“ˆ์— ์—ฐ๊ฒฐ๋˜๋Š” ์ •๋„
  • ๋””์ž์ธ ๊ฐœ๋… : ์ •๊ตํ•จ/๊ตฌ์ฒดํ™” (Refinement)
    • ๋‹จ๊ณ„์  ์ •์ œ : ํ•˜ํ–ฅ์‹(Top-down) ์„ค๊ณ„ ์ „๋žต, ํ”„๋กœ๊ทธ๋žจ์€ ์ ˆ์ฐจ ์„ธ๋ถ€์‚ฌํ•ญ์˜ ๋ ˆ๋ฒจ์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์„ธ๋ถ„ํ™”ํ•˜์—ฌ ๊ฐœ๋ฐœ๋จ
    • ์ •๊ตํ•จ์€ ์ •๊ตํ•จ์˜ ๊ณผ์ •์ด๋‹ค
    • ์ถ”์ƒํ™”์™€ ์ •์ œ๋Š” ์ƒํ˜ธ๋ณด์™„์  ๊ฐœ๋…
    • ์ถ”์ƒํ™”๋ฅผ ํ†ตํ•ด ์„ค๊ณ„์ž๋Š” ์ ˆ์ฐจ/๋ฐ์ดํ„ฐ๋ฅผ ์ง€์ •ํ•˜๋ฉด์„œ๋„ ๋‚ฎ์€ ๋ ˆ๋ฒจ์˜ ์„ธ๋ถ€์‚ฌํ•ญ์„ ์–ต์ œํ•จ.
    • ๊ตฌ์ œํ™”๋ฅผ ํ†ตํ•ด ์„ค๊ณ„์ž๋Š” ์„ค๊ณ„ ์ง„ํ–‰์— ๋”ฐ๋ผ ๋‚ฎ์€ ๋ ˆ๋ฒจ์˜ ์„ธ๋ถ€์‚ฌํ•ญ์„ ํ‘œ์‹œํ•จ.
  • ๋””์ž์ธ ๊ฐœ๋… : ์žฌ๊ตฌ์„ฑ (Refactoring)
    • ๊ธฐ๋Šฅ์ด๋‚˜ ๋™์ž‘ ๋ณ€๊ฒฝ์—†์ด ๊ตฌ์„ฑ์š”์†Œ์˜ ์„ค๊ณ„๋ฅผ ๋‹จ์ˆœํ™”ํ•œ ์žฌ๊ตฌ์„ฑ ๊ธฐ๋ฒ•
    • ์™ธ๋ถ€ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๋ฐฉ์‹. SW ์‹œ์Šคํ…œ ๋ณ€๊ฒฝ ํ”„๋กœ์„ธ์Šค
    • SW ๋ฆฌํŒฉํ„ฐ๋ง ์‹œ ๊ฒ€์‚ฌ๋˜๋Š” ๋ถ€๋ถ„
      1. ์ค‘๋ณต
      2. ๋ถˆํ•„์š”ํ•œ ์š”์†Œ
      3. ๋น„ํšจ์œจ์ ์ด๊ฑฐ๋‚˜ ํ•„์š”์—†๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
      4. ๋ถ€์‹คํ•˜๊ฒŒ ๊ตฌ์„ฑ๋˜๊ฑฐ๋‚˜ ๋ถ€์ ์ ˆํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ, ๋˜๋Š” ๋” ๋‚˜์€ ์„ค๊ณ„๋กœ ์ˆ˜์ •๋  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ์„ค๊ณ„ ์‹คํŒจ.
  • ๋””์ž์ธ ๊ฐœ๋… : ํด๋ž˜์Šค ์„ค๊ณ„ (Design Classes)
    • ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์„ค๊ณ„ ์„ธ๋ถ€์‚ฌํ•ญ์„ ์ œ๊ณต, ๋ถ„์„ ํด๋ž˜์Šค ์„ธ๋ถ„ํ™”
    • ๋น„์ฆˆ๋‹ˆ์Šค ์†”๋ฃจ์…˜ ์ง€์›์„ ์œ„ํ•ด SW์ธํ”„๋ผ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์ƒˆ๋กœ์šด ์„ค๊ณ„ ํด๋ž˜์Šค ์ง‘ํ•ฉ ์ƒ์„ฑ
    • ์™„์ „ํ•˜๊ณ  ์ถฉ๋ถ„ํ•จ
    • ์›์‹œ์„ฑ
    • ๋†’์€ ์‘์ง‘๋ ฅ
    • ๋‚ฎ์€ ๊ฒฐํ•ฉ๋ ฅ

 

The Design Model

  • Process dimension: ํ”„๋กœ์„ธ์Šค ์ฐจ์›์€ ์„ค๊ณ„ ์ž‘์—…์ด SW ํ”„๋กœ์„ธ์Šค์˜ ์ผ๋ถ€๋กœ ์‹คํ–‰๋จ์— ๋”ฐ๋ผ ๋ชจ๋ธ์˜ ์ง„ํ™”๋ฅผ ๋‚˜ํƒ€๋ƒ„
  • Abstraction dimension: ์ถ”์ƒํ™” ์ฐจ์›์€ ๋ถ„์„ ๋ชจ๋ธ์˜ ๊ฐ ์š”์†Œ๊ฐ€ ์„ค๊ณ„ ๋“ฑ๊ฐ€๋ฌผ๋กœ ๋ณ€ํ™˜๋˜์–ด ๋ฐ˜๋ณต์ ์œผ๋กœ ์ •์ œ๋  ๋•Œ์˜ ์„ธ๋ถ€ ์ˆ˜์ค€์„ ๋‚˜ํƒ€๋ƒ„

์„ค๊ณ„ ๋ชจ๋ธ ์š”์†Œ(Design Model Elements)

  • ๋ฐ์ดํ„ฐ ์š”์†Œ
    • data model → data structures
    • data model → database architecture
  • ์„ค๊ณ„ ์š”์†Œ
    • ์‘์šฉํ”„๋กœ๊ทธ๋žจ ๋„๋ฉ”์ธ
    • ๋ถ„์„ ํด๋ž˜์Šค, ๊ด€๊ณ„, ํ˜‘๋ ฅ ๋ฐ ํ–‰๋™์ด ์„ค๊ณ„ ์‹คํ˜„์œผ๋กœ ๋ณ€ํ™˜๋จ
    • ํŒจํ„ด๊ณผ ์Šคํƒ€์ผ
  • ์ธํ„ฐํŽ˜์ด์Šค ์š”์†Œ
    • ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค (UI)
    • ๋‹ค๋ฅธ ์‹œ์Šคํ…œ, ์žฅ์น˜, ๋„คํŠธ์›Œํฌ ๋˜๋Š” ์ •๋ณด์˜ ๋‹ค๋ฅธ ์ƒ์‚ฐ์ž/์†Œ๋น„์ž์— ๋Œ€ํ•œ ์™ธ๋ถ€ ์ธํ„ฐํŽ˜์ด์Šค
    • ๋‹ค์–‘ํ•œ ์„ค๊ณ„ ๊ตฌ์„ฑ์š”์†Œ ๊ฐ„์˜ ๋‚ด๋ถ€ ์ธํ„ฐํŽ˜์ด์Šค
  • ๊ตฌ์„ฑ ์š”์†Œ (Component)
  • ๋ฐฐํฌ ์š”์†Œ (Deployment)