header-img
Info :

๋ฉด์ ‘์ค€๋น„์šฉ MVVM - Android ์ •๋ฆฌ (๋งจ ์•„๋ž˜์˜ ๋ ˆํผ๋Ÿฐ์Šค๋“ค์„ ๊ผญ ํ™•์ธํ•ด์ฃผ์„ธ์š”.)

 

MVC

  • ๊ตฌ์„ฑ : Model, View(์œ ์ €๊ฐ€ ๋ณด๊ณ ์žˆ๋Š” ํ™”๋ฉด), Controller
  • ํ๋ฆ„ : Controller์—์„œ ์ด๋ฒคํŠธ ๋ฐœ์ƒ → ์ด๋ฒคํŠธ์— ๋”ฐ๋ผ Model ์—…๋ฐ์ดํŠธ๋ฅผ ์š”์ฒญ → View์— ์ „๋‹ฌ → View๋Š” Model์˜ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐ›์•„์„œ ๊ฐฑ์‹ 
  • View, Controller์— ๋กœ์ง์ด ์ดํ•ฉ๋˜์–ด ์žˆ์–ด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ์ด ์‰ฝ์ง€ ์•Š์Œ. ๋˜ํ•œ ์ด๋ ‡๊ฒŒ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ์— ํŠน์ • ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ํ•ด๋„ ์–ด๋ ค์›€์ด ์žˆ์Œ.

 

MVP

  • ๊ตฌ์„ฑ : Model, View, Presenter(View์—์„œ ์š”์ฒญํ•œ ์ •๋ณด๋ฅผ Model๋กœ๋ถ€ํ„ฐ ๊ฐ€๊ณตํ•˜์—ฌ ๋ทฐ๋กœ ์ „๋‹ฌ)
  • ํ๋ฆ„ : ์‚ฌ์šฉ์ž์˜ ์•ก์…˜์„ View๋กœ๋ถ€ํ„ฐ ๋ฐ›์Œ → View๋Š” ๋ฐ›์€ ์ด๋ฒคํŠธ๋ฅผ Presenter๋กœ ๋„˜๊น€ → Presenter์—์„œ Model๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญ → Model์€ repo๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๊ณ  Presenter๋กœ ๋„˜๊น€ → Presenter์—์„œ ๊ฒฐ๊ณผ๋ฅผ View๋กœ ํ†ต๋ณด → View ์—…๋ฐ์ดํŠธ
  • Presenter๊ฐ€ View, Model ์‚ฌ์ด๋ฅผ ์ž‡๋Š” ๊ฐ€๊ต ์—ญํ• ์„ ํ•˜๋ฏ€๋กœ View์™€ Model ์‚ฌ์ด์˜ ๊ฒฐํ•ฉ๋„๊ฐ€ ๊ฐ•ํ•˜๋˜ MVC์˜ ๋‹จ์ ์€ ๊ทน๋ณต.
  • ๊ทธ๋Ÿฌ๋‚˜ Presenter์™€ View๋Š” 1:1 ๋‹จ๊ณ„์ž„. ๋”ฐ๋ผ์„œ View์™€ Presenter ์‚ฌ์ด์˜ ์˜์กด์„ฑ์ด ๊ฐ•ํ•จ.

 

MVVM

  • ๊ตฌ์„ฑ : Model, View, ViewModel
  • View : Activity๊ฐ€ ์†ํ•จ. DataBinding, ViewBinding ์‚ฌ์šฉํ•ด๋„ Controller๊ฐ€ ํฌํ•จ๋˜์–ด View์— ํ•ด๋‹นํ•จ.
  • ViewModel : ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•จ. ํ•„์š”ํ•œ ํ†ต์ง€๋งŒ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ์–ด์•ผ ํ•จ.
    • ์—ฌ๊ธฐ์„œ ์ƒ๊ธฐ๋Š” ๊ณ ๋ฏผ - ์ด ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•ด์•ผ ํ•˜๋Š”๊ฐ€? ์ฆ‰, ๋‹จ์ˆœํ•œ ๋ฒ„ํŠผ ์ด๋ฒคํŠธ๋กœ ๋ทฐ์˜ ๊ฐ„๋‹จํ•œ ๋ถ€๋ถ„๋งŒ ๋ฐ”๋€Œ๋Š”๋ฐ ์ด๊ฑธ ๋„˜๊ฒจ์•ผ ๋˜๋‚˜? ์ด๋Ÿฐ ๊ณ ๋ฏผ๋“ค์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋จ.
  • ํ๋ฆ„ : view์—์„œ ์ด๋ฒคํŠธ ๊ฐ์ง€ → viewmodel์—์„œ ์ด๋ฒคํŠธ์™€ ๊ด€๋ จ๋œ model์˜ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ → model์˜ ํ˜ธ์ถœ๋œ ๋ฉ”์†Œ๋“œ๊ฐ€ ์ž‘์—… ํ›„ ๊ฐ’ ๋ฆฌํ„ด → viewmodel์€ ํ˜ธ์ถœํ•œ ๋ฉ”์†Œ๋“œ๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๊ฒฐ๊ณผ๋ฅผ livedata์— ์ €์žฅ → view์—์„œ livedata์˜ ๋ณ€๊ฒฝ ๊ฐ์ง€ํ•ด์„œ ํ•ด๋‹น ๊ฐ’์œผ๋กœ ๋ทฐ์— ๊ฐฑ์‹ 

 

ViewModel?

ViewModel์˜ ๋ชฉํ‘œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Œ

  1. ์ฝ”๋“œ์˜ ๋ถ„๋ฆฌ
  2. ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ์˜ ๊ฐ€๋Šฅ์„ฑ
  3. ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ๋กœ์ง์— ๋Œ€ํ•œ ์˜ค๋ฅ˜ ์˜ˆ์ธก

์ฆ‰ ์ด์ƒ์ ์ธ ๋ทฐ๋ชจ๋ธ์„ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ๋กœ์ง ๋ถ„๋ฆฌ + ์œ ๋‹› ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ๊นŒ์ง€ ๊ณ ๋ คํ•ด์ค˜์•ผ ํ•จ. ๋ทฐ๋ชจ๋ธ์˜ ๋ชจ๋“  ํ•จ์ˆ˜๊ฐ€ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•˜๋„๋ก ๊ตฌํ˜„์ด ๋˜์–ด์•ผ ํ•จ.

viewmodel์—๋Š” context๋ฅผ ๋„˜๊ธฐ์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Œ. ๊ฐ€์žฅ ํฐ ์ด์œ ๋Š” ์ƒ๋ช…์ฃผ๊ธฐ๊ฐ€ ๋‹ค๋ฅด๋‹ค๋Š” ์ ์ด ์žˆ์Œ. ์œ„ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ๋ทฐ๋ชจ๋ธ์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋Š” ๋ทฐ์˜ ์ƒ๋ช…์ฃผ๊ธฐ์™€ ๋‹ค๋ฆ„. ๋ทฐ์˜ ์ƒ๋ช…์ฃผ๊ธฐ๊ฐ€ ๋๋‚ฌ๋Š”๋ฐ viewmodel์— Activity/Fragment์—์„œ ํ•  ์ˆ˜ ์žˆ๋Š”๊ฑธ ๋ชจ๋‘ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” context๋ฅผ ๋„˜๊ธฐ๊ฒŒ ๋˜๋ฉด ์ถฉ๋Œ, ์˜ˆ์™ธ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋จ. ๋˜ํ•œ ๋ทฐ๋ชจ๋ธ ์ž์ฒด๋Š” ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•ด์•ผ ํ•˜๋Š”๋ฐ ์•ˆ๋“œ๋กœ์ด๋“œ ์ฝ”๋“œ๊ฐ€ ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๋ฉด ํ…Œ์ŠคํŠธ๊ฐ€ ์–ด๋ ค์›Œ์ง„๋‹ค๋Š” ์ ๋„ ์žˆ์Œ.

๊ทธ๋ ‡๋‹ค๋ฉด context๊ฐ€ ํ•„์š”ํ•œ ์ƒํ™ฉ์—์„œ ๋ทฐ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•˜๋Š”๊ฐ€? : AndroidViewModel ์‚ฌ์šฉ. AndroidViewModel์€ Application context๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Œ.

// AndroidViewModel ์ƒ์†
class VM(application: Application) : AndroidViewModel(application)

// context ํ•„์š”ํ•œ ๊ณณ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
getApplication<Application>().applicationContext

 

๋‚ด๊ฐ€ ์‚ฌ์šฉํ–ˆ๋˜ MVVM

  • Data Binding, Live Data ์‚ฌ์šฉ, ViewModel ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ
  • ์•กํ‹ฐ๋น„ํ‹ฐ์—์„œ ์ด๋ฒคํŠธ ๋ฐ›๊ณ  ๋น„์ง€๋‹ˆ์Šค์  ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๊ณ  ์ด ์ด๋ฒคํŠธ๋กœ ์ธํ•ด ๋ทฐ๊ฐ€ ์ƒˆ๋กœ ๊ฐฑ์‹ ๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ data binding - live data ์‚ฌ์šฉ. ๊ทธ ์™ธ์— ๋น„์ง€๋‹ˆ์Šค์  ์ฒ˜๋ฆฌ๋งŒ ํ•„์š”ํ•˜๋ฉด viewmodel์—์„œ ์ฒ˜๋ฆฌ๋งŒ ํ•ด์ฃผ๊ณ  ๋๋‚ฌ์Œ. ๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ์ด๋ฒคํŠธ๊ฐ€ viewmodel์—์„œ ์„œ๋ฒ„๋กœ ์ด๋ฒคํŠธ ๊ฐฑ์‹ ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ repository pattern์œผ๋กœ ๋งŒ๋“ค์–ด๋‘์—ˆ๋˜ ํ•ด๋‹น repository๋ฅผ ์‚ฌ์šฉํ•œ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ

 

๋ ˆํผ๋Ÿฐ์Šค

'CS > Android, Kotlin' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Android] Custom View  (0) 2023.04.15
[Android] Data Binding  (0) 2023.04.15
[Android] ์•ˆ๋“œ๋กœ์ด๋“œ ๋ฆฌ์†Œ์Šค  (0) 2023.04.07
[Android] AOS ART, Garbage Collector ๋ฐฉ์‹  (0) 2023.04.07
๋ฒ”์œ„ ์ง€์ • ํ•จ์ˆ˜  (0) 2022.12.01
๋”๋ณด๊ธฐ
CS/Android, Kotlin