๐Ÿ“–ย MVC Pattern(Model-View-Controller)

Model + View + Controller ๊ตฌ์กฐ์˜ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด

  • ํ•˜๋‚˜์˜ View๋Š” ํ•˜๋‚˜์˜ mvc๋กœ ์ œ์–ด
  • MVC์™€ MVC๊ฐ€ ์†Œํ†ตํ•  ๋•Œ ๋‹ค๋ฅธ MVC๋Š” ํ•ญ์ƒ ์ž์‹ ์˜ View๋กœ ์ทจ๊ธ‰
    ์ฆ‰, ์–ด๋–ค MVC๋Š” ๋‹ค๋ฅธ MVC์˜ View๊ฐ€ ๋  ์ˆ˜ ์žˆ์Œ

๐Ÿ“–Model

์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ์ดํ„ฐ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ด๋‹น

  • View์— ๋Œ€ํ•ด์„  ๋ชฐ๋ผ ๊ทธ๋ƒฅ ๋ฐ์ดํ„ฐ๋งŒ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด โ†’ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ์— ๋งž์ถฐ ์ €์žฅํ•  ํ˜•ํƒœ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ค‘์š”, UI์—์„œ ์–ด๋–ป๊ฒŒ ๋ณด์ผ์ง€๋Š” ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์Œ(Person์ด๋ผ๋Š” ๊ตฌ์กฐ์ฒด์— ์ƒ์ผ์„ ์ €์žฅํ•˜๋Š” ๊ฒƒ์€ OK, ๋ฌธ์ž์—ด์„ ์–ด๋–ค ์‹์œผ๋กœ ํŒŒ์‹ฑํ•ด ์–ด๋–ค ์‹์œผ๋กœ ํ™”๋ฉด์— ๋„์šธ์ง€๋Š” NO)
  • ๋ฐ์ดํ„ฐ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์กฐ์ฒด(์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€/๊ธฐ์กด ๋ฐ์ดํ„ฐ ์ •๋ณด ์—…๋ฐ์ดํŠธ/ํŠน์ • ๋ฐ์ดํ„ฐ ์ •๋ณด ์–ป๊ธฐ)
  • ๋„คํŠธ์›Œํฌ ๋กœ์ง : ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„์˜ค๋Š” ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ์„ ๋‹ด์€ ๋„คํŠธ์›Œํฌ ๋กœ์ง
  • ๋ฐ์ดํ„ฐ ํŒŒ์‹ฑ : JSON ๋“ฑ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์™”์„ ๋•Œ ํŒŒ์‹ฑํ•˜๋Š” ๋กœ์ง
  • Manager ๊ฐ์ฒด : ๊ตฌ์กฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด๋‘๊ณ  ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์–ด๋””์„œ๋“  ์ ‘๊ทผํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก Manager๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ

๐Ÿ“–View

์‚ฌ์šฉ์ž ํ™”๋ฉด ํ‘œ์‹œ(UI) ๋ฅผ ๋‹ด๋‹น

  • ์ง์ ‘ ์œ ์ €์™€ ์ƒํ˜ธ์ž‘์šฉ
  • ์žฌ์‚ฌ์šฉ์„ฑ์ด ๊ฐ•์กฐ
  • ํ™”๋ฉด ํ‘œ์‹œ์—๋งŒ ๊ด€์‹ฌ ์žˆ์–ด Model์— ๋Œ€ํ•ด์„  ๋ชฐ๋ผ
  • UIView๋ฅผ ์ƒ์†ํ•ด ๋งŒ๋“ค์–ด์ง„ ์„œ๋ธŒํด๋ž˜์Šค
  • Core Animation
  • Core Graphics

๐Ÿ“–Controller

Model๊ณผ View์˜ ์ค‘์žฌ์ž ์—ญํ• ์„ ๋‹ด๋‹น

  • ์•ฑ์˜ ํ•ต์‹ฌ ๋กœ์ง์„ ๋‹ด๊ณ  ์žˆ๋Š” ๊ณ„์ธต(๋ชจ๋ธ์•„ ๋„ˆ ์ด ํ•จ์ˆ˜ ์‹คํ–‰ํ•ด, ๋ทฐ์•ผ ๋„ˆ ํ™”๋ฉด ์ด๋ ‡๊ฒŒ ๋ฐ”๊ฟ”)
  • Model์˜ ์ •๋ณด๋ฅผ ํ•ด์„ํ•˜๊ณ  ๊ตฌ์„ฑํ•ด์„œ View๋ฅผ ์–ด๋–ป๊ฒŒ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ์•Œ๋ ค์คŒ
  • View์—์„œ์˜ ์‚ฌ์šฉ์ž์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ํ•ด์„ํ•ด Model์ด ์–ด๋–ค ์ž‘์—…์„ ํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ์•Œ๋ ค์คŒ

๐Ÿ“–Apple์˜ MVC

View Controller๊ฐ€ View์™€ Controller์˜ ์—ญํ• ์„ ๋ชจ๋‘ ์ˆ˜ํ–‰ ์ฆ‰, View Controller๊ฐ€ View์™€ Controller๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ์—ญํ• 

๐Ÿ“–MVC Pattern์—์„œ ๊ฐ ์˜์—ญ์ด ๋Œ€ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•

๐Ÿ“ŽController โ†’ Model/View

  • Model์— ์ง์ ‘ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • View์— ๋Œ€ํ•ด์„œ ์ง์ ‘ ์ ‘๊ทผ ๊ฐ€๋Šฅ(outlet)

๐Ÿ“ŽView โ†’ Controller

  • target-action ๊ตฌ์กฐ๋กœ ์‚ฌ์šฉ์ž์˜ ํ–‰์œ„(in View)์— ๋”ฐ๋ผ ํ•„์š”ํ•œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ(in Controller)
  • delegate, datasource๋ฅผ ํ†ตํ•ด ๋ฏธ๋ฆฌ ์ •ํ•ด์ง„ ๋ฐฉ์‹์˜ ์š”์ฒญ์„ ์ˆ˜ํ–‰

๐Ÿ“ŽModel โ†’ Controller (directly : NO indirectly : YES)

Model UI(View)์™€ ๋…๋ฆฝ์ ์ด๊ณ , Controller๋Š” ๊ทผ๋ณธ์ ์œผ๋กœ UI(View)์— ์ข…์†๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—์ง์ ‘์ ์œผ๋กœ ์ƒํ˜ธ์ž‘์šฉํ•˜์ง€ ์•Š๊ณ  Controller๋ฅผ ํ†ตํ•ด ๊ฐ„์ ‘์ ์œผ๋กœ ์ƒํ˜ธ์ž‘์šฉ

  • Model์ด Notification์„ ์ด์šฉํ•ด ๋ฌด์–ธ๊ฐ€ ๋ณ€ํ™”ํ–ˆ๋‹ค๋Š” ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ด๋‘๋ฉด, ๋‚˜์ค‘์— Controller๊ฐ€ ๊ทธ ์•Œ๋ฆผ์„ ๋ณด๊ณ  ๋‹ค์‹œ Model์— ์ ‘๊ทผํ•ด ์ƒˆ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ด
  • Model์— ์žˆ๋Š” ํ”„๋กœํผํ‹ฐ์— Controller๊ฐ€ KVO(Key-Value Observing)์„ ์ด์šฉํ•ด ๊ทธ ํ”„๋กœํผํ‹ฐ์˜ ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•ด ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ด โ†’ Model์€ ์ด๋ฏธ ์•Œ๋ ค์ ธ์žˆ๋Š” ์ฃผํŒŒ์ˆ˜๋กœ ๋ฐฉ์†ก, Controller๋Š” ๊ทธ ์ฃผํŒŒ์ˆ˜์— ๋งž์ถ”๊ณ  ์žˆ๋‹ค๊ฐ€ ๋ชจ๋ธ์˜ ๋ฐฉ์†ก์— ๋‹ฌ๋ผ์ง„ ๊ฒŒ ์žˆ์œผ๋ฉด Controller๊ฐ€ Model์—๊ฒŒ ๊ฐ€์„œ ๋ฐ”๋€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์‹(like radio)

๐Ÿ“–MVC Pattern์˜ ์žฅ์ 

  • ์„œ๋กœ ์—ญํ• ์„ ๋‚˜๋ˆ„์–ด์„œ ๊ตฌํ˜„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋…์„ฑ์ด ์ข‹์Œ
  • ์ ‘๊ทผ์ด ์‰ฌ์›Œ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ด
  • ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ๋นจ๋ผ ๊ทœ๋ชจ๊ฐ€ ์ž‘์€ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹์Œ

๐Ÿ“–MVC Pattern์˜ ๋‹จ์ 

  • View์™€ Controller๊ฐ€ ๋„ˆ๋ฌด ๋ฐ€์ ‘ํ•˜๊ฒŒ ์—ฐ๊ฒฐ โ†’ ๋Œ€๋ถ€๋ถ„์˜ ์ฝ”๋“œ๊ฐ€ Controller์— ๋ฐ€์ง‘๋  ์ˆ˜ ์žˆ์Œ
  • ํ”„๋กœ์ ํŠธ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํž˜๋“ฆ