CS/๋””์ž์ธ ํŒจํ„ด

[๋””์ž์ธ ํŒจํ„ด] MVP ํŒจํ„ด, MVVM ํŒจํ„ด

1eehyunji 2023. 8. 7. 18:55

https://1eehyunji.tistory.com/entry/MVC-%ED%8C%A8%ED%84%B4

 

MVC ํŒจํ„ด

๋ชจ๋ธ(Model), ๋ทฐ(View), ์ปจํŠธ๋กค๋Ÿฌ(Controller)๋กœ ์ด๋ฃจ์–ด์ง„ ๋””์ž์ธ ํŒจํ„ด์ด๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์„ธ ๊ฐ€์ง€ ์—ญํ• ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์—์„œ ๊ฐ๊ฐ์˜ ๊ตฌ์„ฑ ์š”์†Œ์—๋งŒ ์ง‘์ค‘ํ•ด์„œ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค.

1eehyunji.tistory.com

MVP, MVVM ํŒจํ„ด ๋ชจ๋‘ MVC ํŒจํ„ด์—์„œ ํŒŒ์ƒ๋œ ํŒจํ„ด์ด๋ฏ€๋กœ MVC ํŒจํ„ด์— ๋Œ€ํ•œ ์ง€์‹์ด ์„ ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค!

 

MVP(Model - View - Presenter) ํŒจํ„ด

MVC ํŒจํ„ด์œผ๋กœ๋ถ€ํ„ฐ ํŒŒ์ƒ๋˜์—ˆ๊ณ , MVC์—์„œ C์— ํ•ด๋‹นํ•˜๋Š” Controller๊ฐ€ Present๋กœ ๊ต์ฒด๋œ ํŒจํ„ด์ด๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋ ‡๊ฒŒ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ”„๋ ˆ์  ํ„ฐ๋กœ ๋ณ€๊ฒฝํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋ญ˜๊นŒ?

 

MVC ํŒจํ„ด์—์„œ ๋ทฐ์˜ ์—…๋ฐ์ดํŠธ๋Š” ๋ชจ๋ธ์˜ ์—…๋ฐ์ดํŠธ์— ๋”ฐ๋ผ ์‹คํ–‰๋˜๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ๋ทฐ์™€ ๋ชจ๋ธ์˜ ์˜์กด์„ฑ์ด ์กด์žฌํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๋‘˜์˜ ์˜์กด์„ฑ๋•Œ๋ฌธ์— ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ณต์žกํ•ด์งˆ์ˆ˜๋ก ๋ชจ๋ธ๊ณผ ๋ทฐ์˜ ๊ด€๊ณ„๊ฐ€ ๋ณต์žกํ•ด์ง€๋ฉด์„œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›Œ์ง„๋‹ค.

 

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด MVP ํŒจํ„ด์ด ๋“ฑ์žฅํ–ˆ๋‹ค. 

Presenter : View์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , View์—์„œ ์š”์ฒญ์ด ๋ฐœ์ƒํ•˜๋ฉด ์š”์ฒญ์— ๋”ฐ๋ผ ๋ชจ๋ธ์˜ ์ƒํƒœ๋ฅผ ๊ฐฑ์‹ ์‹œํ‚จ๋‹ค.

(View์™€ Model์„ ์ž‡๋Š” ๋‹ค๋ฆฌ ์—ญํ• ์„ ํ•จ)

 

์—ฌ๊ธฐ์„œ MVC ํŒจํ„ด๊ณผ ๋‹ค๋ฅธ ์ ์€ ์‚ฌ์šฉ์ž ์ž…๋ ฅ๊ณผ ๊ฐ™์€ ์œ ์ € ์ด๋ฒคํŠธ๊ฐ€ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ๋“ค์–ด์™”์ง€๋งŒ, MVP ํŒจํ„ด์—์„  ์œ ์ € ์ด๋ฒคํŠธ๊ฐ€ ๋ทฐ๋กœ๋ถ€ํ„ฐ ๋“ค์–ด์˜จ๋‹ค.

์ฆ‰, ๋ทฐ์—์„œ ์š”์ฒญ์ด ๋ฐœ์ƒํ•˜๋ฉด ํ”„๋ ˆ์  ํ„ฐ๋Š” ๊ทธ ์ด๋ฒคํŠธ์— ๋”ฐ๋ผ ๋ชจ๋ธ์„ ๊ฐฑ์‹ ํ•œ๋‹ค.

์ด ํŒจํ„ด์„ ์ด์šฉํ•ด์„œ ๋ทฐ์™€ ๋ชจ๋ธ์˜ ์˜์กด์„ฑ์„ ๋ถ„๋ฆฌํ–ˆ์ง€๋งŒ, ํ”„๋ ˆ์  ํ„ฐ์™€ ๋ทฐ๊ฐ€ ์ผ๋Œ€์ผ ๊ด€๊ณ„๋กœ ๋‘˜์˜ ์˜์กด์„ฑ์ด ๊นŠ๋‹ค.

์ด๋Ÿฌํ•œ ํ”„๋ ˆ์  ํ„ฐ์™€ ๋ทฐ์˜ ์˜์กด์„ฑ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด MVVM ํŒจํ„ด์ด ๋“ฑ์žฅํ–ˆ๋‹ค.

 

MVVM(Model - View - ViewModel) ํŒจํ„ด

MVC ํŒจํ„ด์˜ Controller์™€ MVP ํŒจํ„ด์˜ Presenter๊ฐ€ ViewModel๋กœ ๋ฐ”๋€ ํŒจํ„ด์ด๋‹ค.

ViewModel : View๋ฅผ ๋” ์ถ”์ƒํ™”ํ•œ ๊ณ„์ธต(View๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•œ Model)

MVP ํŒจํ„ด๊ณผ ๋™์ผํ•˜๊ฒŒ ๋ทฐ๋กœ ์œ ์ € ์ด๋ฒคํŠธ๊ฐ€ ๋“ค์–ด์˜จ๋‹ค.

View์—์„œ ์ž…๋ ฅ์ด ๋“ค์–ด์˜ค๋ฉด Command ํŒจํ„ด์„ ํ†ตํ•ด ViewModel์— ๋ช…๋ น์„ ๋‚ด๋ฆฌ๊ฒŒ ๋˜๊ณ  ViewModel์€ Model์—๊ฒŒ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•œ๋‹ค.

Model์€ ViewModel์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์‘๋‹ตํ•˜๊ณ  (์—ฌ๊ธฐ๊นŒ์ง€๋Š” Presenter์™€ ๋™์ผํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค.)

Data Binding์„ ํ†ตํ•ด ViewModel์˜ ๊ฐ’์ด ๋ณ€ํ™”ํ•˜๋ฉด ๋ฐ”๋กœ View์˜ ์ •๋ณด๊ฐ€ ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค.
(Presenter๊ฐ€ ์‘๋‹ต์— ๋”ฐ๋ผ View๋ฅผ ๋ฐ”๊พธ์–ด์ฃผ๋Š” ์ถ”๊ฐ€์ ์ธ ์ž‘์—…์ด ์ž๋™ํ™”๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค.)

์ฆ‰, Command์™€ Data Binding์„ ํ†ตํ•ด View์˜ ์˜์กด์„ฑ์„ ๋Š์–ด๋ฒ„๋ ธ๋‹ค.

* Command ๊ธฐ๋ฒ• : ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์š”์†Œ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋‚˜์˜ ์•ก์…˜์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ธฐ๋ฒ•

* ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ : ํ™”๋ฉด์— ๋ณด์ด๋Š” ๋ฐ์ดํ„ฐ์™€ ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์น˜์‹œํ‚ค๋Š” ๊ธฐ๋ฒ•์œผ๋กœ, ๋ทฐ๋ชจ๋ธ์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ทฐ๊ฐ€ ๋ณ€๊ฒฝ๋œ๋‹ค.