iOS) Design pattern MVVM(1/2) - MVC, MVVM μ•Œμ•„λ³΄κΈ°

1 minute read

πŸŒ‚ Design Pattern

  • λ””μžμΈ νŒ¨ν„΄μ„ μ •ν•˜κ²Œ 되면 λͺ¨λ“  ν΄λž˜μŠ€μ™€ 속성을 ꡬ쑰적으둜 정리가λŠ₯ν•˜λ©° νŒ€ μž‘μ—… μ‹œ μ›ν™œν•œ μ˜μ‚¬μ†Œν†΅κ³Ό μ½”λ“œ μˆ˜μ •μ΄ κ°€λŠ₯ν•˜λ‹€.

❗️ MVC(Model-View-Controller)

  • Model : 데이터에 κ΄€ν•œ 둜직 λ‹΄λ‹Ή(데이터 κ°’ λ³€κ²½ 및 관리)
  • View : μ‚¬μš©μžμ—κ²Œ λ³΄μ—¬μ§€λŠ” ν™”λ©΄ λ‹΄λ‹Ή(UI)
  • Controller : Model κ³Ό View μ—°κ²°(Model 값을 View 에 λ³΄μ—¬μ€Œ)
  • μ˜€λ¦¬μ§€λ‚  MVC νŒ¨ν„΄μ€ iOS κ°œλ°œμ— μ ν•©ν•˜μ§€ μ•Šμ•„(Model,View,Controller κ°€ λ„ˆλ¬΄ λ°€μ ‘ν•˜κ²Œ μ—°κ΄€) μ• ν”Œμ—μ„œλŠ” CocoaMVC νŒ¨ν„΄μ„ μ œμ‹œν–ˆλ‹€.
  • Controller κ°€ View 와 Model 의 μ€‘μž¬μž 역할을 ν•˜μ—¬ View 와 Model 에 독립성 λΆ€μ—¬.

  • ν•˜μ§€λ§Œ μ• ν”Œμ˜ CocoaMVC νŒ¨ν„΄μ—μ„œλŠ” View 와 Controller 의 μ—­ν•  뢄리가 μ™„λ²½ν•˜μ§€ μ•Šλ‹€.
    • Controller 역할을 μˆ˜ν–‰ν•˜λŠ” UIViewController 은 Controller κ°€ View λ₯Ό ν¬ν•¨ν•˜λŠ” 것은 λ¬Όλ‘  View 의 life-cycle κΉŒμ§€ κ΄€λ¦¬ν•˜κΈ° λ•Œλ¬Έμ— λ¬΄κ±°μ›Œμ§€κ³ , 뢄리가 μ–΄λ ΅κ³ , μž¬μ‚¬μš©λ„ μ–΄λ ΅κ³ , 각각 ν…ŒμŠ€νŠΈν•˜κΈ°λ„ μ–΄λ ΅λ‹€.
    • viewDidLoad 와 같은 life-cycle 이벀트 관리, @IBAction λ“±μ˜ 콜백처리 λ“±μœΌλ‘œ Massive ViewController κ°€ λœλ‹€.
    • κ·Έλž˜μ„œ μ‹€μ œλ‘œλŠ” μ•„λž˜μ™€ 같은 ꡬ쑰가 λœλ‹€.

μž₯단점

  • μž₯점 : 생산성이 λ†’λ‹€. μ—­ν•  λΆ„λ‹΄ν•˜μ—¬ λΉ λ₯΄κ²Œ κ΅¬ν˜„. ν™•μž₯성이 λ†’λ‹€.
  • 단점 : Apple’s MVC 의 경우 λ§Žμ€ μ½”λ“œλ“€μ΄ Controller 에 μ§‘μ€‘λ˜μ–΄ μ»€μ§€κ²Œ λœλ‹€. 후에 μœ μ§€λ³΄μˆ˜κ°€ μ–΄λ ΅λ‹€λŠ” 문제 쑴재.

❗️ MVVM(Model-View-ViewModel)

  • MVC νŒ¨ν„΄μ˜ Controller κ°€ μ»€μ§€λŠ” 문제λ₯Ό View Model 을 λ‘ μœΌλ‘œμ¨ ν•΄κ²°ν•˜κ³ μž ν•œλ‹€.
  • Model μ—μ„œ κ°€μ Έμ˜¨ View 에 μ—…λ°μ΄νŠΈν•  데이터λ₯Ό View Model 이 μ²˜λ¦¬ν•˜κ²Œν•¨μœΌλ‘œμ¨ Controller κ°€ λ³΅μž‘ν•΄μ§€λŠ” 것을 쀄여쀀닀. 즉, View Model 은 presentation logic 을 λ‹€λ£¨κ²Œ λ˜μ§€λ§Œ UI λŠ” 닀루지 μ•ŠλŠ”λ‹€.

  • MVVM μ—μ„œ View Model 은 View 와 1:n 관계λ₯Ό 이룬닀. View 와 View Model κ°„μ—λŠ” 데이터 바인딩을 톡해 νŠΉμ • View 의 속성과 View Model 속성을 μ—°κ²°ν•œ λ’€ View Model 속성이 λ³€κ²½λ˜λ©΄ μžλ™μœΌλ‘œ View λ₯Ό μ—…λ°μ΄νŠΈ.
Data Binding

View Modelκ³Ό View λŠ”Β μ„œλ‘œμ—κ²Œ λ°μ΄ν„°μ˜ 변경을 μ•Œλ €μ€„ 수 μžˆλŠ” 방법이 ν•„μš”ν•˜λ‹€. 이것이 λ°”λ‘œΒ Data Binding 이닀.

Model

  • Model 은 View λ‚˜ View Model κ³Ό 관계없이 λ…λ¦½μ μœΌλ‘œ ꡬ성. 앱이 μ‚¬μš©μžμ—κ²Œ λ³΄μ—¬μ§€λŠ” λͺ¨μŠ΅μ΄λ‚˜ μ œκ³΅λ°©μ‹κ³Ό 관련이 μ—†λ‹€.

View

  • μ‚¬μš©μžκ°€ λ³Ό 수 μžˆλŠ” μš”μ†Œλ“€. 이벀트 λ°œμƒ μ‹œ View λŠ” View Model 에 μ•Œλ¦°λ‹€. View λŠ” View Model μ—λ§Œ μ ‘κ·Ό κ°€λŠ₯. View 의 event λ₯Ό View Model μ—κ²Œ μ•Œλ €μ£Όλ©΄ View Model 이 Model 을 μ—…λ°μ΄νŠΈ μ‹œν‚¨λ‹€.

View Model

  • Model κ³Ό View 의 μ€‘κ°œμž. View Model 은 View 의 μƒνƒœλ₯Ό μ €μž₯ν•˜κ³ , View μ—μ„œ λ°œμƒν•˜λŠ” μ•‘μ…˜μ— 따라 μˆ˜ν–‰ν•  μ•±μ˜ κΈ°λŠ₯을 μ •μ˜ν•˜λŠ” λͺ…령을 κ΅¬ν˜„. View Model 은 View κ°€ μ–΄λ–€ λͺ¨μŠ΅μΈμ§€ μ „ν˜€ μ•Œμ§€ λͺ»ν•œλ‹€.

μž₯단점

  • μž₯점 : ViewModel 은 View 와 독립적이닀. 즉 UIKit κ΄€λ ¨ μ½”λ“œκ°€ μ—†λ‹€. λ”°λΌμ„œ MVC λͺ¨λΈλ³΄λ‹€ μœ λ‹› ν…ŒμŠ€νŒ…ν•˜κΈ°κ°€ μ’‹λ‹€.(View 와 View Model κ°„μ˜ μ˜μ‘΄μ„±μ΄ μ—†κΈ° λ•Œλ¬Έ)
  • 단점 : ViewModel 섀계가 만만치 μ•Šλ‹€. View 에 λŒ€ν•œ μ²˜λ¦¬κ°€ λ³΅μž‘ν•΄μ§ˆμˆ˜λ‘ ViewModel 이 μ˜€λ²„μŠ€νŽ™μ΄ 될 수 μžˆλ‹€.

좜처:

https://eunjin3786.tistory.com/31?category=837198

Categories:

Updated: