DesignArchitecturePattern

MDN > MVC
๐Ÿ“Œ Model-View-Controller Pattern, GUI๋กœ ๊ตฌ์„ฑ๋œ SW์— ์ข‹์€ Maintainability (์œ ์ง€๋ณด์ˆ˜์„ฑ)์„ ๊ฐ–๊ธฐ ์œ„ํ•œ ํ•˜๋‚˜์˜ ํ•ด๊ฒฐ์ฑ…

  • ๋ชฉ์ : SW Complexity (SW Crisis)
    • โญ UI์˜ ๋ณ€ํ™”๊ฐ€ Non-UI = Model์—๊ฒŒ ์ „ํŒŒ๋˜์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•จ โžก Non-UI์˜ ๊ฒฝ์šฐ UI์˜ Interface๋งŒ ์•Œ๊ณ  UI์˜ Module๊ณผ๋Š” ๋…๋ฆฝ์„ฑ ๊ฐ€์ง (UI๋Š” Non-UI ์•Œ์•„๋„ ์ƒ๊ด€ ์—†์Œ)
    1. Non-UI์— ๋น„ํ•ด UI๋Š” ๋ณ€ํ™”๊ฐ€ ์žฆ์Œ
    2. ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฅธ ํ˜•ํƒœ์˜ View๋กœ ๋ณด์—ฌ์ค˜์•ผ ํ•˜๋Š” ์ƒํ™ฉ ์กด์žฌ
    3. UI ์†๋„ ๋นจ๋ผ์•ผ ํ•œ๋‹ค๋Š” ์ œ์•ฝ ์กด์žฌ
  • ๋ฐฉ๋ฒ• ๋ฐ ๋ชฉํ‘œ: Separation of Concerns (๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ) โžก ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋ชจ๋ธ, ๋ฐ์ดํ„ฐ์˜ ํ‘œํ˜„, ์ปจํŠธ๋กค ๋กœ์ง์„ ๋ถ„๋ฆฌ
  • โค๏ธ ์žฅ์ 
    1. Minimize Coupling (๊ฒฐํ•ฉ๋„)
    2. Reusability (์žฌ์‚ฌ์šฉ์„ฑ), Extensibility (ํ™•์žฅ์„ฑ)
    3. Maintainability (์œ ์ง€๋ณด์ˆ˜์„ฑ)
    4. Readability (๊ฐ€๋…์„ฑ)
  • ๐Ÿ’” ๋‹จ์ 
    1. Model๊ณผ View์˜ ์˜์กด์„ฑ์„ ์™„์ „ํžˆ
    2. Massive View Controller: ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ, ๋‹ค์ˆ˜์˜ Model, View๊ฐ€ Controller์™€ ๋ณต์žกํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋˜๋Š” ๊ฒƒ

๊ตฌ์„ฑ

MVC๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ์ „์ฒด System์ด ํฌ๊ฒŒ ์„ธ ํŒŒํŠธ๋กœ ๋‚˜๋‰˜์–ด์ง

Model

๐Ÿ“Œ ๋ฐ์ดํ„ฐ, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ด๊ณ  ์žˆ๋Š” ๊ฐ์ฒด

  • ๋””์ž์ธ ํŒจํ„ด: Observer
    • View๊ฐ€ ๋ Œ๋”๋ง์— ํ•„์š”ํ•œ Model์˜ State๋ฅผ ๊ตฌ๋…๋ฐ›๊ฒŒ ๋จ
      • Model = Publisher/Subject
      • View = Subscriber/Observer
  • ์ œ์•ฝ
    1. UI์— ๋…๋ฆฝ์  โžก Unit (Module) Test ์‰ฌ์›€
    2. ๋น ๋ฅธ ์†๋„ โ†” Model ์ˆ˜ํ–‰ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ View๊ฐ€ ๋ฉˆ์ถ”๊ฒŒ ๋จ

View

๐Ÿ“Œ Model์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ฃผ๋Š” ๊ฐ์ฒด

  • ์ˆ˜๋™์  โžก Controller์—๊ฒŒ ์‚ฌ์šฉ์ž ์ธํ’‹ ํ•ด์„์„ ์œ„์ž„, Model์˜ State ๋ณ€ํ™”์— ๋”ฐ๋ผ ๋ Œ๋”๋ง
  • ํŒจํ„ด: Strategy

Controller

๐Ÿ“Œ ์‚ฌ์šฉ์ž ์ธํ’‹์„ ๋ฐ›์•„ Model์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ , ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ View๋กœ ์ „๋‹ฌํ•˜๋Š” ์ƒํ˜ธ ์ž‘์šฉ์„ ์œ„ํ•œ ๊ฐ์ฒด

Litmus Test

๐Ÿ“Œ UI Layer์—์„œ View์™€ Controller์˜ ๊ตฌ๋ถ„์ด ๋ชจํ˜ธํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•