iOS

[ iOS ] MVC - 1) MVC๋ž€?

Forest Yun 2023. 10. 17. 23:04
728x90

Model - View - Controller ์•„ํ‹ฐํด์„ ์ฝ๊ณ  ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

 

Model-View-Controller

Retired Document Important: This document may not represent best practices for current development. Links to downloads and other resources may no longer be valid. Model-View-Controller The Model-View-Controller (MVC) design pattern assigns objects in an ap

developer.apple.com

 

 

MVC๋ž€?

MVC๋Š” Model - View - Controller ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” ๋””์ž์ธ ํŒจํ„ด์œผ๋กœ, ์ด ํŒจํ„ด์„ ์ ์šฉํ•˜๋Š” ์•ฑ์˜ ๊ฐ์ฒด๋Š” ์•ž์„œ ๋งํ•œ ์„ธ ๊ฐ€์ง€ ์—ญํ•  ์ค‘ ํ•˜๋‚˜๋ฅผ ๋ถ€์—ฌ๋ฐ›๋Š”๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฒ„ํŠผ์€ View ์—ญํ• ์„ ๋ถ€์—ฌ๋ฐ›๋Š”๋‹ค.

๋˜ํ•œ ์ด ํŒจํ„ด์€ ๊ฐ์ฒด๊ฐ€ ์•ฑ์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ์—ญํ• ์„ ์ •์˜ํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, Model - View - Controller ๊ฐ„ ์„œ๋กœ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์ •์˜ํ•œ๋‹ค. ๋’ค์ด์–ด ๋‚˜์˜ค๊ฒ ์ง€๋งŒ View์™€ Model์€ ์„œ๋กœ ์ง์ ‘ ์ƒํ˜ธ์ž‘์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์ค‘๊ฐ„์—์„œ Controller๊ฐ€ ์„œ๋กœ๋ฅผ ์—ฐ๊ฒฐํ•ด ์ฃผ๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. 

์ด ์„ธ ํƒ€์ž… ๊ฐ๊ฐ์€ ์„œ๋กœ ์ถ”์ƒ์ ์ธ ๊ฒฝ๊ณ„๋กœ ํ•˜์—ฌ๊ธˆ ๋ถ„๋ฆฌ๋˜์–ด์žˆ์œผ๋ฉฐ, ๊ฒฝ๊ณ„๋ฅผ ๋„˜์–ด ๋‹ค๋ฅธ ํƒ€์ž…์˜ ๊ฐ์ฒด๋“ค๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•œ๋‹ค.

MVC ํƒ€์ž…๋“ค์˜ ๊ฐ ๋ชจ์Œ๋“ค์€ ๊ณ„์ธต(layer)์œผ๋กœ ๋ถˆ๋ฆฐ๋‹ค. ( Model layer / View layer / Controller layer )

 

 

 

 

 

 

MVC์˜ ์ด์ 

MVC๋Š” Cocoa ์•ฑ์˜ ์ข‹์€ ๋””์ž์ธ์— ์žˆ์–ด ํ•ต์‹ฌ์ ์ด๋‹ค. ์ด ํŒจํ„ด์„ ์ฑ„ํƒํ•˜์—ฌ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ด์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ์žฌ์‚ฌ์šฉ์„ฑ ์ฆ๊ฐ€
  • ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜ ์šฉ์ด
  • ์ข‹์€ ํ™•์žฅ์„ฑ
  • Cocoa ๊ธฐ์ˆ ๊ณผ ๊ตฌ์กฐ๋Š” MVC์— ๊ธฐ๋ฐ˜์„ ๋‘๊ณ  ์žˆ์œผ๋ฉฐ, ์ปค์Šคํ…€ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ๊ฒฝ์šฐ MVC ์—ญํ•  ์ค‘ ํ•˜๋‚˜๋ฅผ ์ดํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

 

 

 

Model ๊ฐ์ฒด

Model ๊ฐ์ฒด๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์บก์Šํ™”ํ•˜๊ณ , ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋กœ์ง๊ณผ ์ž‘์—…์„ ์ •์˜ํ•œ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ๋žŒ๋“ค์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด Person์ด๋ผ๋Š” ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ๋งŒ๋“ ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด์ž. ๊ตฌ์กฐ์ฒด๋กœ ๋ชจ๋ธ์„ ๋งŒ๋“ค๊ณ , ๊ตฌ์กฐ์ฒด ์•ˆ์— name ํ”„๋กœํผํ‹ฐ์™€ say๋ผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฑธ ์ƒ๊ฐํ•˜๋ฉด Model์˜ ์—ญํ• ์ด ๋ฌด์—‡์ธ์ง€ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์ด์™ธ์—๋„ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ๋“ฑ์˜ ์ž‘์—…๋„ Model์— ํ•ด๋‹นํ•œ๋‹ค.

struct Person {
   let name: Sting
   
   func say() {
      print("์•ˆ๋…•? ๋‚˜๋Š” \(name)์ด์•ผ")
   }
}

 

Model ๊ฐ์ฒด๋Š” ๋‹ค๋ฅธ Model ๊ฐ์ฒด์™€ ์ผ๋Œ€๋‹ค ๊ด€๊ณ„๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ Model ๊ณ„์ธต์€ ํ•˜๋‚˜ ์ด์ƒ์˜ ๊ฐ์ฒด ๊ทธ๋ž˜ํ”„๋ฅผ ๊ฐ€์ง„๋‹ค.

Object graph: ์ปดํ“จํ„ฐ ๊ณผํ•™์˜ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๊ฐ์ฒด ๊ทธ๋ฃน์€ ๋‹ค๋ฅธ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ง์ ‘ ๋˜๋Š” ๊ฐ„์ ‘ ์ฐธ์กฐ๋ฅผ ํ†ตํ•œ ์„œ๋กœ ๊ฐ„์˜ ๊ด€๊ณ„๋กœ ๋„คํŠธ์›Œํฌ๋ฅผ ํ˜•์„ฑํ•œ๋‹ค.

 

ํŒŒ์ผ ๋˜๋Š” ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์— ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋“ค์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ด ๋ฐ์ดํ„ฐ๊ฐ€ ๋กœ๋“œ๋œ ํ›„์—๋Š” Model ๊ฐ์ฒด์— ์†ํ•ด์•ผ ํ•œ๋‹ค. Model ๊ฐ์ฒด๋Š” ํŠน์ • ๋ฌธ์ œ ๋ถ„์•ผ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์œ ์‚ฌํ•œ ๋ฌธ์ œ์— ๋Œ€ํ•ด ์žฌ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ”„๋กœํ•„ ๋ฐ์ดํ„ฐ ๋กœ๋“œ ์‹œ, ๋งˆ์ดํŽ˜์ด์ง€์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ”„๋กœํ•„์„ ๋ณผ ๋•Œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. Model๊ณผ View ๊ฐ„์˜ ์ด์ƒ์ ์ธ ๊ด€๊ณ„๋กœ๋Š” ์ง์ ‘์ ์ธ ์—ฐ๊ฒฐ์ด ์—†๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰, model ๊ฐ์ฒด๊ฐ€ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์™€ presentation์— ๊ด€๋ จ๋ผ์„œ๋Š” ์•ˆ ๋œ๋‹ค.

 

Commnuication

๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ˆ˜์ •ํ•˜๋Š” view ๊ณ„์ธต์—์„œ์˜ ์‚ฌ์šฉ์ž ์•ก์…˜์€ controller๋ฅผ ํ†ตํ•ด ์ƒํ˜ธ์ž‘์šฉํ•˜๋ฉฐ, ์ด๋Š” model ๊ฐ์ฒด ์ƒ์„ฑ ๋˜๋Š” ์—…๋ฐ์ดํŠธํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ”„๋กœํ•„ ์ƒ์„ฑ ์‹œ TextField์— ์ด๋ฆ„์€ ์ ์–ด ํ…Œ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ํ”„๋กœํ•„ ์ˆ˜์ • ์‹œ TextField์— ์žˆ๋Š” ์ด๋ฆ„์„ ์ˆ˜์ •ํ•œ ๋’ค '์™„๋ฃŒ' ๋ฒ„ํŠผ์„ ์„ ํƒํ•˜๋ฉด ์‚ฌ์šฉ์ž ์•ก์…˜์ด view๋ฅผ ๊ฑฐ์ณ controller๋กœ ์ „๋‹ฌ๋˜์–ด ๋ฏธ๋ฆฌ ๊ตฌํ˜„ํ•œ ๋กœ์ง์— ๋”ฐ๋ผ ๊ด€๋ จ๋œ model ๊ฐ์ฒด๊ฐ€ ์—…๋ฐ์ดํŠธ๋œ๋‹ค.

๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๊ฐ€ ์ „๋‹ฌ๋˜์–ด model ๊ฐ์ฒด๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ์—๋Š”, model ๊ฐ์ฒด๋Š” controller ๊ฐ์ฒด์—๊ฒŒ ์ด๋ฅผ ์•Œ๋ฆฌ๊ณ (notify), controller ๊ฐ์ฒด๋Š” ์ด๋Ÿฌํ•œ model ๊ฐ์ฒด์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ ์ ˆํ•œ view ๊ฐ์ฒด์— ์—…๋ฐ์ดํŠธํ•œ๋‹ค.

 

 

 

 

View ๊ฐ์ฒด

view ๊ฐ์ฒด๋Š” ๋ฒ„ํŠผ, ํ…์ŠคํŠธ, ์ด๋ฏธ์ง€ ๋“ฑ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ์ฒด์ด๋‹ค. view ๊ฐ์ฒด๋Š” ์ž์‹ ์ด ํ™”๋ฉด์— ์–ด๋–ป๊ฒŒ ๊ทธ๋ ค์งˆ์ง€๋„ ์•Œ๊ณ  ์žˆ์œผ๋ฉฐ, ์‚ฌ์šฉ์ž ์•ก์…˜์—๋„ ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๋‹ค. view ๊ฐ์ฒด์˜ ์ฃผ์š” ๋ชฉ์ ์€ ์‚ฌ์šฉ์ž์—๊ฒŒ model ๊ฐ์ฒด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฌํ•œ view์™€ model์˜ ๊ด€๊ณ„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , view ๊ฐ์ฒด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ MVC ํŒจํ„ด์—์„œ model ๊ฐ์ฒด์™€ ๋ถ„๋ฆฌ๋œ๋‹ค.
view ๊ฐ์ฒด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์žฌ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์—์„œ ์ผ๊ด€์ ์ธ ๋ชจ์Šต์„ ๋ณด์ธ๋‹ค. UIKit ํ”„๋ ˆ์ž„์›Œํฌ๋Š” view ํด๋ž˜์Šค ๋ชจ์ž„์„ ์ œ๊ณตํ•˜๊ณ , Interface Builder๋Š” UIKit์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ˆ˜์‹ญ ๊ฐœ์˜ view ๊ฐ์ฒด๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

Interface Builder: Xcode์—์„œ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๊ทธ๋ž˜ํ”ฝ ํ™˜๊ฒฝ(.nib, .xib)

 

Communication

view ๊ฐ์ฒด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ controller ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด model ๊ฐ์ฒด์˜ ๋ฐ์ดํ„ฐ ๋ณ€ํ™”๋ฅผ ์•Œ๊ฒŒ ๋˜๊ณ , controller ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž ์ฃผ๋„์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ model ๊ฐ์ฒด์— ์•Œ๋ฆฐ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด TextField์— ์ž…๋ ฅ๋œ ํ…์ŠคํŠธ๋ฅผ model ๊ฐ์ฒด์— ์•Œ๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 

 

Controller ๊ฐ์ฒด

controller ๊ฐ์ฒด๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ view ๊ฐ์ฒด์™€ ํ•˜๋‚˜ ์ด์ƒ์˜ model ๊ฐ์ฒด ์‚ฌ์ด์˜ ์ค‘๊ฐœ์ž๋กœ์„œ ๋™์ž‘ํ•œ๋‹ค. ์ฆ‰ controller ๊ฐ์ฒด๋Š” view ๊ฐ์ฒด model ๊ฐ์ฒด์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ๋Œ€ํ•ด ์•Œ๊ฒŒ ํ•˜๊ณ , model ๊ฐ์ฒด๊ฐ€ view ๊ฐ์ฒด์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ๋Œ€ํ•ด ์•Œ๊ฒŒ ํ•˜๋Š” ํŒŒ์ดํ”„์ด๋‹ค. ๋˜ํ•œ controller ๊ฐ์ฒด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ์„ค์ •๊ณผ ์ž‘์—… ์กฐ์ •์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ๋‹ค๋ฅธ ๊ฐ์ฒด๋“ค์˜ LifeCycle์„ ๊ด€๋ฆฌํ•œ๋‹ค.

 

Communication

ํ•œ controller ๊ฐ์ฒด๋Š” view ๊ฐ์ฒด์— ์ƒ์„ฑ๋œ ์‚ฌ์šฉ์ž ์•ก์…˜์„ ํ•ด์„ํ•˜๊ณ , ์ƒˆ๋กญ๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋ฅผ model ๊ณ„์ธต์— ์ „๋‹ฌํ•œ๋‹ค. model ๊ฐ์ฒด๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ, controller ๊ฐ์ฒด๋Š” ํ•ด๋‹น view ๊ฐ์ฒด์— ๊ทธ model ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ๊ทธ ํ›„ view ๊ฐ์ฒด๋“ค์€ ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜์˜ํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ค€๋‹ค.

 

 

 

 

 

728x90