๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
IOS๐ŸŽ/์•„ํ‚คํ…์ณ

[์•„ํ‚คํ…์ณ] MVP ๋ž€

by Jouureee 2022. 1. 6.

์˜ค๋Š˜์€ MVx ํŒจํ„ด ์ค‘ MVP ํŒจํ„ด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค๊ตฌ ํ•œ๋‹ค!!

์ „์— ์žˆ๋˜ ํŒ€์—์„œ MVP ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ ์ค‘์ด์—ˆ๋Š”๋ฐ ์ด๋•Œ ViewController ๋ง๊ณ  Presenter ํŒŒ์ผ์„ ํ•˜๋‚˜ ๋” ๋งŒ๋“ค์–ด ํŒŒ์ผ์ด ์ •๋ง ๋งŽ์•˜์—ˆ๋˜ ๊ฒฝํ—˜์— ์ด์–ด MVP ํŒจํ„ด์— ๋Œ€ํ•ด ์ •๋ฆฌํ•˜๊ณ ์ž ํ•œ๋‹ค.

 

MVP ํŒจํ„ด

Model, View, Presenter 3๊ฐ€์ง€๋กœ ์ด๋ฃจ์–ด์ง„ ํŒจํ„ด์ด๋‹ค.

MVC ํŒจํ„ด๊ณผ ๋‹ค๋ฅด๊ฒŒ Presenter์˜ ๊ฐœ๋…์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. 

 

์šฐ๋ฆฌ๊ฐ€ MVC ํŒจํ„ด์„ ํ™œ์šฉํ•ด ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋ฉด Controller๊ฐ€ View์™€ ๋ฐ€์ ‘ํ•˜๊ฒŒ ์—ฐ๊ด€๋˜์–ด View+Controller ์˜ ๊ผด๋กœ ํ•ฉํ•˜์—ฌ ๊ฐœ๋ฐœ๋˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ๋‹ค. ViewController๊ฐ€ ์ง€๋‹Œ  ์ƒ๋ช…์ฃผ๊ธฐ ์—ญ์‹œ ๊ณ ๋ คํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์— ์žˆ์–ด Controller๊ฐ€ ๋”์šฑ์ด ๋น„๋Œ€ํ•ด์ง„๋‹ค. 

์ด๋Ÿฐ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Controller ๋Œ€์‹  Presenter ๊ฐœ๋…์„ ๋„์ž…ํ•˜์˜€๋‹ค.

์ฆ‰ Presenter๋Š” ์ƒ๋ช…์ฃผ๊ธฐ์™€ ์—ฐ๊ด€์ด ์—†๊ณ  ์˜ค๋กœ์ง€ ๋ทฐ์˜ ์ด๋ฒคํŠธ์— ๋ฐ˜์‘ํ•ด ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ์—ญํ•  + ๋ทฐ์˜ ์ƒํƒœ๋ฅผ ๋ฐ›์•„์™€์„œ ๋ชจ๋ธ์— ์—…๋ฐ์ดํŠธ ํ•ด์ฃผ๋Š” ์—ญํ• ์„  ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

์ƒํ˜ธ์ž‘์šฉ ํ•˜๋Š” ๊ณผ์ •

1. View์— ์‚ฌ์šฉ์ž์˜ ์ด๋ฒคํŠธ๊ฐ€ ๋“ค์–ด์˜จ๋‹ค.

 

2. View๋Š” Presenter์—๊ฒŒ ์ด๋ฒคํŠธ๋ฅผ ์•Œ๋ฆฐ๋‹ค.

 

3. Presenter๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์•„ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. Model์˜ ๋ณ€ํ™”๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด  ๋ณ€ํ™”๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

4. ๋ณ€ํ™”๋ฅผ View์— ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค.

 

์ด๋ ‡๊ฒŒ Presenter๋Š” Model๊ณผ View ์‚ฌ์ด ์ค‘๊ฐ„์ž์˜ ์—ญํ• ์„ ํ•˜๋ฉฐ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋‚˜์ค‘์— ์ด ๋กœ์ง๋งŒ ๊ฐ€์ง€๊ณ  Unit Testํ•˜๊ธฐ ์šฉ์ดํ•œ ์ธก๋ฉด๋„ ์žˆ๋‹ค! ํ•˜์ง€๋งŒ MVP ํŒจํ„ด ์—ญ์‹œ View์™€ Presenter๊ฐ„ ์ด๋ฒคํŠธ ์ˆ˜ํ–‰์ด ๋งŽ์„ ๊ฒฝ์šฐ ์˜์กด ๊ด€๊ณ„๊ฐ€ ๊ฐ•ํ•ด์ง€๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์–ด 

MVC ํŒจํ„ด์—์„œ ๋ฌธ์ œ์‹œ ๋˜์—ˆ๋˜ View+Presenter๊ฐ€ ๋น„๋Œ€ํ•ด์งˆ์ˆ˜ ์žˆ๋‹ค.

 

์˜ˆ์ œ

LoginViewController

์•ˆ์— Presenter๋ฅผ ๊ฐ€์ง„๋‹ค.

 

LoginPresenter๋Š”

๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์—์„œ ์ˆ˜ํ•ด๋  ๊ธฐ๋Šฅ๋“ค์„ ํ”„๋กœํ† ์ฝœ๋กœ ๋ช…์‹œํ•ด๋‘๊ณ 

 

View์™€ Model์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ์ด๊ณณ์—์„œ ์—…๋ฐ์ดํŠธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

Presenter์˜ ๊ธฐ๋Šฅ๋“ค์„ ํ”„๋กœํ† ์ฝœ๋กœ ๋นผ๋‘์—ˆ๋Š”๋ฐ ์ด๋ ‡๊ฒŒ ํ•œ๋‹ค๋ฉด ํ›„์— Unit Test์‹œ 

LoginPresenter๋งŒ์„ ์„ ์–ธํ•ด ํ•„์š” ๊ธฐ๋Šฅ๋“ค์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์•ž์„œ ์–˜๊ธฐํ–ˆ๋˜ Presenter๊ณผ View๊ฐ„์˜ ์˜์กด ๊ด€๊ณ„๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ์— ๊ณ ์•ˆ๋œ ํŒจํ„ด์ด ๋ฐ”๋กœ MVVM ํŒจํ„ด์ด๋ผ๊ณ  ํ•œ๋‹ค. ์•ž์„œ MVP ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด View๋Š” Presenter๋ฅผ Presenter๋Š” View๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋‹ค. ์ด๋Š” View์™€ Presenter๊ฐ€ ์™„์ „ํžˆ ๋…๋ฆฝ์ ์ด๋ผ๊ณ  ํ•  ์ˆ˜์—†์„ ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ MVVM ํŒจํ„ด์—์„œ๋Š” View๊ฐ€ ViewModel์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋‚˜ MVP์—์„œ Presenter์™€ ๋‹ฌ๋ฆฌ ViewModel์€ View๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด view๋ฅผ ๋ชจ๋ฅด๋ฉด์„œ ์–ด๋–ป๊ฒŒ ์—…๋ฐ์ดํŠธ ํ•ด์ค„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ผ๊นŒ ?

MVVM์˜ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” Data Binding์ด๋‹ค. View์—์„œ ์ธํ’‹ ๋˜๋Š” ์•„์›ƒํ’‹์œผ๋กœ ๋“ค์–ด์˜ค๊ณ  ๋‚˜๊ฐ€๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ViewModel๊ณผ ๋ฐ”์ธ๋”ฉํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ViewModel์€ View์—์„œ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ๋“ค์„ ํ™œ์šฉํ•ด ๋ชจ๋ธ์„ ์—…๋ฐ์ดํŠธ ํ•˜๊ณ  ์ด๋ฅผ ๋‹ค์‹œ view์— ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ MVVM ํŒจํ„ด์—์„œ๋Š” View ๋ถ€๋ถ„์ด ์˜ค๋กœ์ง€ View๋งŒ์„ ์—…๋ฐ์ดํŠธ ํ•˜๋Š”๋ฐ ์ฝ”๋“œ ์ฑ…์ž„ ๋ถ„๋ฆฌ๋ฅผ ๋ช…ํ™•ํžˆ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ MVVM์— ๋Œ€ํ•ด ์ •๋ฆฌ ํ•œ ๊ธ€์ด ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค !! 

 

์ด๋ ‡๊ฒŒ MVC ~ MVP ~ MVVM  ํŒจํ„ด์„ ๊ฐ๊ฐ ์•Œ์•„๋ณด์•˜๋‹ค. ์ˆœ์„œ๋Š” ๋’ค์ฃฝ๋ฐ•์ฃฝ์ด์—ˆ์ง€๋งŒ MVVM ํŒจํ„ด์œผ๋กœ ์ž‘์„ฑํ•œ ์ฝ”๋“œ ์ค‘ ViewModel์— View์˜ ์ผ์„ ์ฃผ์ž…ํ•ด์ค€ ์œ„๋ฐ˜(?) ์ด ์ƒ๊ฐ๋‚˜์„œ ๊ณ ์น˜๋Ÿฌ ๊ฐ€์•ผ ํ• ๋“ฏํ•˜๋‹ค !! 

 

๋Œ“๊ธ€