Computer Science/swift ๋ฝ€๊ฐœ๊ธฐ - ์ฐธ๊ณ  ์‚ฌ์ดํŠธ ์ €์žฅ์†Œ

[ios] swift MVVM vs MVC ์ฐจ์ด

_cactus 2022. 1. 26. 10:30
๋ฐ˜์‘ํ˜•

MVVM

: MVC์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋””์ž์ธ ํŒจํ„ด
  Model - View - ViewModel

๐Ÿ’ก MVC์™€ MVVM ๋‹จ์ˆœ์ฐจ์ด

  • Controller๊ฐ€ ์•„๋‹Œ ViewModel ๊ณ„์ธต์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ
  • ViewModel ๋˜ํ•œ Controller์ฒ˜๋Ÿผ View์™€ Model์˜ ์ค‘๊ฐ„ ๊ณ„์ธต ์—ญํ• ์„ ํ•จ

 

1. Model

: ๋ฐ์ดํ„ฐ์™€ ๊ด€๋ จ๋œ ์ฝ”๋“œ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๊ณ„์ธต (MVC์˜ Model๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€)

  • ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„๋‘๊ธฐ ์œ„ํ•œ ๊ตฌ์กฐ์ฒด๋“ค(struct)
  • ๋„คํŠธ์›Œํฌ ๋กœ์ง
  • JSON ํŒŒ์‹ฑ ์ฝ”๋“œ
  • ๋“ฑ ...
struct Person { // Person์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ ๋‹ด์€ ๊ตฌ์กฐ์ฒด
  let name: String
  var age: Int

  init(json: JSON) { // JSON ํŒŒ์‹ฑ
    name = json["name"].stringValue
    age = json["age"].intValue
  }
}
๋ฐ˜์‘ํ˜•

2. View

: ์•ฑ์˜ UI์— ๋Œ€ํ•œ ์ฝ”๋“œ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๊ณ„์ธต

  • ๊ฐ ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•œ ์ •๋ณด
  • ๋ฐฐ์น˜ ์ •๋ณด
  • ์žฌ์‚ฌ์šฉ์„ฑ์ด ๊ฐ•์กฐ๋จ

 

3. ViewModel

: ์•ฑ์˜ ํ•ต์‹ฌ์ ์ธ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ด๊ณ  ์žˆ๋Š” ๊ณ„์ธต

  • view์™€ model ์‚ฌ์ด์—์„œ view์˜ ์š”์ฒญ์— ๋”ฐ๋ผ ๋กœ์ง์„ ์‹คํ–‰ํ•˜๊ณ , model์˜ ๋ณ€ํ™”์— ๋”ฐ๋ผ view refresh ๋“ฑ..

๐Ÿ’กMVC → MVVM ๋„˜์–ด๊ฐ€๋Š” ์ด์œ  ?

  • ๊ธฐ์กด์— ๋งŽ์ด ์‚ฌ์šฉํ•œ UIKit ํ”„๋ ˆ์ž„์›Œํฌ๋Š” MVC ํŒจํ„ด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ์Œ
  • ์ตœ๊ทผ์— ๋‚˜์˜จ SwiftUI๋Š” MVVM ํŒจํ„ด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•จ
  • UIKit์—์„  ViewController๊ฐ€, SwiftUI์—์„  View๊ฐ€ ์ฃผ์ธ๊ณต

 

UIKit

  • UIKit์˜ MVC์—์„  ViewController๊ฐ€ ๊ฑฐ์˜ ๋ชจ๋“  ์—ญํ• ์„ ํ–ˆ์Œ. ViewController๋Š” View์™€ Model ๊ณ„์ธต์„ ๋ชจ๋‘ ์†Œ์œ 
  • ViewController๋‹จ์œ„๋กœ ํ•œ ํ™”๋ฉด์ด ๊ตฌ์„ฑ๋จ → Controller๋Š” View์™€ Model์„ ๋ชจ๋‘ ์•Œ๊ณ ์žˆ์–ด์•ผ ํ•จ
  • ViewController๋Š” ๋น„์ฆˆ๋‹ˆ์Šค๋กœ์ง ์™ธ์—๋„ View์— ๋Œ€ํ•œ ์„ค์ •, ์ˆ˜์ • ๋“ฑ์˜ ์ฝ”๋“œ๋ฅผ ํฌํ•จ → View์™€ Controller ๊ณ„์ธต์„ ์ œ๋Œ€๋กœ ๋ถ„๋ฆฌX → ViewController์˜ ์ฝ”๋“œ๊ฐ€ ๊ธธ์–ด์งˆ ์ˆ˜ ๋ฐ–์—

SwiftUI

  • View๊ฐ€ ViewModel ์†Œ์œ , ViewModel์ด Model์„ ์†Œ์œ ํ•˜๋Š” ๋ฐฉ์‹
  • ํ™”๋ฉด์„ ์ฃผ๋„ํ•˜๋Š” ๊ฒƒ์€ View → ViewModel์€ Model๋งŒ ์•Œ๋ฉด๋จ (View ์•Œ ํ•„์š”X)
  • ViewModel์€ ๋น„์ฆˆ๋‹ˆ์Šค๋กœ์ง๋งŒ ๊ฐ€์ง€๋„๋ก ๊น”๋”ํ•˜๊ฒŒ ๋ถ„๋ฆฌ๋˜์–ด์žˆ์Œ → ์ฝ”๋“œ ๊ธธ์ด ์งง์Œ! ๐Ÿ™‚
  • ๊ฐ ๊ณ„์ธต์ด ๋”์šฑ ๋ชจ๋“ˆํ™”๋˜์–ด์žˆ์Œ → ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์šฉ์ด

๐Ÿ”Ž User ์ƒํ˜ธ์ž‘์šฉ์ด ์ผ์–ด๋‚ฌ์„๋•Œ.. (์˜ˆ: ๋ฒ„ํŠผ ๋ˆ„๋ฆ„)

  • MVC : user ์ƒํ˜ธ์ž‘์šฉ์ด ์ผ์–ด๋‚ฌ์Œ์„ View → Controller๋กœ ์•Œ๋ฆผ & ๊ทธ์— ๋”ฐ๋ผ ์–ด๋–ค ํ–‰๋™์„ ํ• ์ง€๋Š” Controller๊ฐ€ ์ •ํ•จ
  • MVVM : ์–ด๋–ค ํ–‰๋™์„ ํ• ์ง€๋Š” View๊ฐ€ ์ •ํ•จ. ViewModel์€ ๋กœ์ง๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ์Œ

๐Ÿ”Ž ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„๋•Œ.. (์˜ˆ: ๋ฒ„ํŠผ ๋ˆ„๋ฆ„)

  • MVC : ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚ฌ์Œ์„ Model → Controller๋กœ ์•Œ๋ฆผ & ๊ทธ์— ๋”ฐ๋ผ View๋ฅผ ๋‹ค์‹œ ์–ด๋–ป๊ฒŒ ๊ทธ๋ฆด์ง€๋Š” Controller๊ฐ€ ์ •ํ•จ
  • MVVM : ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚ฌ์Œ์„ Model → ViewModel๋กœ ์•Œ๋ฆผ & ViewModel์€ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ฐ”๋กœ View์—๊ฒŒ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ๋งŒ ํ•˜๊ณ , View๊ฐ€ ์•Œ์•„์„œ ๋‹ค์‹œ ๊ทธ๋ฆผ

 

 

728x90
๋ฐ˜์‘ํ˜•