my repository

Android :: MVC, MVP ๊ทธ๋ฆฌ๊ณ  MVVM ๋ณธ๋ฌธ

IT/Android (Kotlin)

Android :: MVC, MVP ๊ทธ๋ฆฌ๊ณ  MVVM

hjin 2022. 3. 1. 17:33

๐Ÿ’กMVC

MVC

Model + View + Controller

 

Model = ๋ฐ์ดํ„ฐ

  • ๋ฐ์ดํ„ฐ + ์ƒํƒœ + ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง = ์•ฑ์˜ ๋‘๋‡Œ
  • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ์™€ ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„
  • ๋ทฐ๋‚˜ ์ปจํŠธ๋กค๋Ÿฌ์— ๋ฌถ์ด์ง€ ์•Š์•„ ๋งŽ์€ ๊ณณ์—์„œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ

View = xml

  • ๋ชจ๋ธ์˜ ํ‘œํ˜„
  • ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ง€๋Š” UI ๋ถ€๋ถ„
  • UI๋ฅผ ๊ทธ๋ฆฌ๊ณ , ์‚ฌ์šฉ์ž์™€ ์•ฑ๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•  ๋•Œ ์ปจํŠธ๋กค๋Ÿฌ์™€ ํ†ต์‹ 
  • ์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๊ฑฐ๋‚˜ ๊ฐ’์„ ์ž…๋ ฅํ•˜๋Š” ๋“ฑ ํ–‰๋™์„ ํ•  ๋•Œ ๋ฌด์—‡์„ ํ•ด์•ผํ•  ์ง€ ์ž˜ ๋ชจ๋ฅผ์ˆ˜๋ก ๋ชจ๋ธ์— ์ข…์†๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ณด๋‹ค ๋ณ€ํ™”์— ์œ ์—ฐ

Controller = Activity / Fragment

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

๋™์ž‘ ๊ณผ์ •

  1. ์‚ฌ์šฉ์ž์˜ ์•ก์…˜๋“ค์€ Controller์— ๋“ค์–ด์˜ค๊ฒŒ ๋œ๋‹ค.
  2. ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์‚ฌ์šฉ์ž์˜ ์•ก์…˜์„ ํ™•์ธํ•˜๊ณ  model์„ ์—…๋ฐ์ดํŠธ
  3. ์ปจํŠธ๋กค๋Ÿฌ๋Š” model์„ ๋‚˜ํƒ€๋‚ด์ค„ view๋ฅผ ์„ ํƒ
  4. view๋Š” model์„ ์ด์šฉํ•˜์—ฌ ํ™”๋ฉด์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

ํŠน์ง•

  • ์ฝ”๋“œ ๊ตฌ์„ฑ์ด ๊ฐ„๋‹จํ•˜๊ณ , controller์— ๊ธฐ๋Šฅ์ด ๋ชฐ๋นต๋˜์–ด ์žˆ๋‹ค.
  • ๊ฐ„๋‹จํ•œ ๊ตฌ์กฐ์˜ ์•ฑ์ด๋ผ๋ฉด MVC ํŒจํ„ด์œผ๋กœ ์ž‘์„ฑํ•˜๋Š”๊ฒŒ ์ง๊ด€์ ์ด๊ณ  ์ž‘์—…๊ณต์ˆ˜๊ฐ€ ์ ๊ฒŒ ๋“ ๋‹ค.
  • ๋‹จ์  : View์™€ Model ์‚ฌ์ด์˜ ์˜์กด์„ฑ์ด ๋†’๊ณ , ํ”„๋กœ๊ทธ๋žจ์˜ ๋ณต์žก๋„๊ฐ€ ์˜ฌ๋ผ๊ฐ€๋ฉด controller์˜ ๊ธธ์ด๊ฐ€ ์ ์  ์ปค์ง€๊ฒŒ ๋˜์–ด ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํž˜๋“ค์–ด์ง

๐Ÿ’กMVP

MVP

Model + View + Presenter => MVC์—์„œ Controller ๋Œ€์‹  Presenter

์ปจํŠธ๋กค๋Ÿฌ์˜ ์ฑ…์ž„์— ๋ฌถ์ด์ง€ ์•Š๊ณ ๋„ ๋ทฐ์™€ ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๊ฒฐํ•ฉํ•˜๋„๋ก ํ•œ๋‹ค.

 

Model : MVC์™€ ๋™์ผ

 

View

  • ๋ณ€ํ•œ ๊ฒƒ : ์•กํ‹ฐ๋น„ํ‹ฐ / ํ”„๋ž˜๊ทธ๋จผํŠธ๊ฐ€ ์ด์ œ ๋ทฐ์˜ ์ผ๋ถ€๋กœ ๊ฐ„์ฃผ๋จ
  • ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ๋ทฐ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ด์„œ, ํ”„๋ฆฌ์  ํ„ฐ๊ฐ€ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ–๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
  • ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํŠน์ • ๋ทฐ์™€ ๊ฒฐํ•ฉ๋˜์ง€ ์•Š๊ณ  ๊ฐ€์ƒ ๋ทฐ๋ฅผ ๊ตฌํ˜„ํ•ด์„œ ๊ฐ„๋‹จํ•œ ์œ ๋‹› ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Œ

Presenter

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

๋™์ž‘ ๊ณผ์ •

  1. ์‚ฌ์šฉ์ž์˜ ์•ก์…˜๋“ค์€ view๋ฅผ ํ†ตํ•ด ๋“ค์–ด์˜ค๊ฒŒ ๋œ๋‹ค.
  2. view๋Š” ๋ฐ์ดํ„ฐ๋ฅผ presenter์— ์š”์ฒญํ•œ๋‹ค.
  3. presenter๋Š” model์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•œ๋‹ค.
  4. model์€ presenter์—์„œ ์š”์ฒญ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์‘๋‹ตํ•œ๋‹ค.
  5. presenter๋Š” view์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์‘๋‹ตํ•œ๋‹ค.
  6. view๋Š” presenter๊ฐ€ ์‘๋‹ตํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ™”๋ฉด์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

ํŠน์ง•

  • Presenter์™€ View๋Š” 1:1 ๊ด€๊ณ„
  • ์žฅ์  : view์™€ model์˜ ์˜์กด์„ฑ์ด ์—†๋‹ค. (MVC ํŒจํ„ด์˜ ๋‹จ์  - view์™€ model์˜ ์˜์กด์„ฑ ํ•ด๊ฒฐ) ⇒ presenter๋ฅผ ํ†ตํ•ด์„œ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ๋ฐ›๊ธฐ ๋•Œ๋ฌธ
  • ๋‹จ์  : view์™€ model์˜ ์˜์กด์„ฑ์€ ํ•ด๊ฒฐ๋˜์—ˆ์ง€๋งŒ, MVC์™€ ์œ ์‚ฌํ•œ ๋งŒํผ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ณต์žก๋„๊ฐ€ ์˜ฌ๋ผ๊ฐ€๋ฉด presenter์˜ ์ฝ”๋“œ๋Ÿ‰์ด ์ปค์ง€๊ณ , view์™€ presenter ์‚ฌ์ด์˜ ์˜์กด์„ฑ์ด ๋†’์•„์ง„๋‹ค. ๊ทธ๋ž˜์„œ MVC์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํž˜๋“ค์–ด์ง

๐Ÿ’กMVVM

MVVM

 

Model + View + ViewModel

 

์œ„์™€ ๊ฐ™์ด MVC, MVP์˜ ๊ฒฝ์šฐ ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ๋ฌด๊ฑฐ์›Œ์ง€๊ฑฐ๋‚˜ ์ข…์†์„ฑ์ด ๊ฐ•ํ•ด์ ธ ํ…Œ์ŠคํŠธ๊ฐ€ ํž˜๋“ค๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›Œ์ง„๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์—ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์•„ํ‚คํ…์ณ ํŒจํ„ด์ด ๋“ฑ์žฅํ–ˆ๊ณ , ๊ทธ ์ค‘ ํ•˜๋‚˜๊ฐ€ MVVM์ด๋‹ค.

์•ˆ๋“œ๋กœ์ด๋“œ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ์‚ฌ์šฉํ•˜๋Š” MVVM์€ ๊ฐ๊ฐ์˜ ์—ญํ• ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ฐ€๋…์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์˜€๊ณ , ํ…Œ์ŠคํŠธ์™€ ๋ชจ๋“ˆํ™”๊ฐ€ ์‰ฝ๊ณ  ๋ทฐ์™€ ๋ชจ๋ธ์„ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์—ฐ๊ฒฐ์ฝ”๋“œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

 

Model : MVC์™€ ๋™์ผ

 

View : MVC์™€ ๋™์ผ

  • ๋ทฐ๋ชจ๋ธ์— ์˜ํ•ด ๋ณด์—ฌ์ง€๋Š” Observable ๋ณ€์ˆ˜์™€ ์•ก์…˜์— ์œ ์—ฐํ•˜๊ฒŒ ๋ฐ”์ธ๋”ฉ

ViewModel

  • view๋ฅผ ๋‚˜ํƒ€๋‚ด์ฃผ๊ธฐ ์œ„ํ•œ model
  • view๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๋ถ€๋ถ„

MVC์™€ MVVM์˜ ์ฐจ์ด์ 

๋™์ž‘ ๊ณผ์ •

  1. ์‚ฌ์šฉ์ž์˜ ์•ก์…˜๋“ค์€ view๋ฅผ ํ†ตํ•ด ๋“ค์–ด์˜จ๋‹ค.
  2. view์— ์•ก์…˜์ด ๋“ค์–ด์˜ค๋ฉด, command ํŒจํ„ด์œผ๋กœ view model์— ์•ก์…˜์„ ์ „๋‹ฌํ•œ๋‹ค.
  3. view model์€ model์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•œ๋‹ค.
  4. model์€ view model์—๊ฒŒ ์š”์ฒญ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์‘๋‹ตํ•œ๋‹ค.
  5. view model์€ ์‘๋‹ต ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณตํ•˜์—ฌ ์ €์žฅํ•œ๋‹ค.
  6. view๋Š” view model๊ณผ Data Binding ํ•˜์—ฌ ํ™”๋ฉด์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

=> ์ฆ‰, ๋ทฐ์—์„œ ๋ทฐ๋ชจ๋ธ๋กœ, ๋ทฐ๋ชจ๋ธ์—์„œ ๋ชจ๋ธ๋กœ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ๋ทฐ์—์„œ ๋ทฐ๋ชจ๋ธ์„ ๊ด€์ฐฐ(Observe)ํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ์ง€ํ•˜๊ณ  ์ž๋™์œผ๋กœ ํ™”๋ฉด์„ ๊ฐฑ์‹ ํ•œ๋‹ค.

 

ํŠน์ง•

  • MVVM ํŒจํ„ด์€ Command ํŒจํ„ด๊ณผ Data Binding ๋‘ ๊ฐ€์ง€ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„๋จ ⇒ view์™€ view model ์‚ฌ์ด์˜ ์˜์กด์„ฑ ์—†์•ฐ
  • viewmodel : view = 1 : n → ์—ฌ๋Ÿฌ ๋ทฐ์—์„œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ, ์ฝ”๋“œ์˜ ์–‘์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

์žฅ์ 

  • ๋ทฐ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ด€์ฐฐํ•œ๋‹ค. (LiveData - Observer ํŒจํ„ด ์ด์šฉ)
  • ์ƒ๋ช…์ฃผ๊ธฐ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•˜๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค. => AAC์˜ ๋ทฐ๋ชจ๋ธ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•กํ‹ฐ๋น„ํ‹ฐ/ํ”„๋ž˜๊ทธ๋จผํŠธ์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๋”ฐ๋ฅด์ง€ ์•Š๋Š”๋‹ค. ์ฆ‰, ์•กํ‹ฐ๋น„ํ‹ฐ/ํ”„๋ž˜๊ทธ๋จผํŠธ์˜ ์ƒ๋ช…์ฃผ๊ธฐ ๋™์•ˆ ๊ณ„์† ์‚ด์•„์žˆ๊ณ , onDestroy()๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ ์‚ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค.
  • ์—ญํ•  ๋ถ„๋ฆฌ => UI, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง, ๋ชจ๋ธ์ด ๊ธฐ๋Šฅ๋ณ„๋กœ ๋ชจ๋“ˆํ™” ๋˜์–ด ์žˆ์Œ

 

์ฐธ๊ณ  : https://blog.yena.io/studynote/2019/03/16/Android-MVVM-AAC-1.html