๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
iOS ๐ŸŽ/iOS

MVC, MVP, MVVM Pattern

by yongmin.Lee 2021. 2. 17.

์ข‹์€ ์•„ํ‚คํ…์ณ

- Modularity ๊ฐœ์ฒด๋“ค ๊ฐ„ ๊ท ํ˜•์žˆ๋Š” ์ฑ…์ž„ ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•ด ๋ชจ๋“ˆ๊ฐ„ ์˜์กด์„ฑ์„ ์ค„์ด๊ณ  ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์œผ๋กœ ๋ณต์žกํ•œ ๋ฌธ์ œ์—์„œ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ํ‚ค ํฌ์ธํŠธ๋ฅผ ์บ์น˜ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•œ๋‹ค

- Testability ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ณ  ์šฉ์ดํ•ด์•ผ ํ•œ๋‹ค

- Ease of use ์œ ์ง€๋ณด์ˆ˜ & ์‚ฌ์šฉ์˜ ์šฉ์ด์„ฑ

 

1. MVC

MVC ํŒจํ„ด

 

1-1. MVC ๊ตฌ์กฐ

Model : ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ์™€ ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„

View : ์‚ฌ์šฉ์ž์—์„œ ๋ณด์—ฌ์ง€๋Š” UI ๋ถ€๋ถ„

Controller : ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ(Action)์„ ๋ฐ›๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„

 

1-2. MVC ๋™์ž‘์ˆœ์„œ

์‚ฌ์šฉ์ž์˜ Action๋“ค์€ Controller์— ๋“ค์–ด์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Controller๋Š” ์‚ฌ์šฉ์ž์˜ Action๋ฅผ ํ™•์ธํ•˜๊ณ , Model์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

Controller๋Š” Model์„ ๋‚˜ํƒ€๋‚ด์ค„ View๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

View๋Š” Model์„ ์ด์šฉํ•˜์—ฌ ํ™”๋ฉด์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

 

1-3. View๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜๋Š” ๋ฐฉ๋ฒ•

View๊ฐ€ Model์„ ์ด์šฉํ•˜์—ฌ ์ง์ ‘ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๋ฐฉ๋ฒ•

Model์—์„œ View์—๊ฒŒ Notify ํ•˜์—ฌ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๋ฐฉ๋ฒ•

View๊ฐ€ Polling์œผ๋กœ ์ฃผ๊ธฐ์ ์œผ๋กœ Model์˜ ๋ณ€๊ฒฝ์„ ๊ฐ์ง€ํ•˜์—ฌ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๋ฐฉ๋ฒ•.

 

1-4. MVC ํŠน์ง•

๊ฐ€์žฅ ๋‹จ์ˆœํ•˜๊ณ  ๋ณดํŽธ์ ์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋””์ž์ธํŒจํ„ด

View์™€ Model ์‚ฌ์ด์˜ ์˜์กด์„ฑ์ด ๋†’์•„ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ปค์งˆ ์ˆ˜๋ก ๋ณต์žกํ•ด์ง€๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›Œ์ง„๋‹ค

Apple MVC ≠ Original MVC

2. Cocoa MVC

(์ขŒ)  expected Cocoa MVC                                                                                         (์šฐ) Realistic Cocoa MVC

1-1. Cocoa MVC ๊ตฌ์กฐ

Model : ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ์™€ ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„

View : ์‚ฌ์šฉ์ž์—์„œ ๋ณด์—ฌ์ง€๋Š” UI ๋ถ€๋ถ„

Controller : Controller๊ฐ€ View์™€ Model์˜ ์ค‘์žฌ์ž ์—ญํ• 

 

1-2. Cocoa MVC ๋™์ž‘

์‚ฌ์šฉ์ž์˜ Action๋“ค์€ View๋ฅผ ํ†ตํ•ด ๋“ค์–ด์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

View๋Š” user action์„ controller์—๊ฒŒ ๋ณด๋‚ด๊ณ  Model์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธ

Model์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜์—ˆ์Œ์„ controller์—๊ฒŒ ์‘๋‹ต.

Controller๋Š” ์—…๋ฐ์ดํŠธ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  View๋ฅผ ์—…๋ฐ์ดํŠธ

 

Cocoa MVC example

1-3. Cocoa MVC ํŠน์ง•

Controller๊ฐ€ View๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒƒ์€ ๋ฌผ๋ก , View์˜ Life Cycle๊นŒ์ง€ ๊ด€๋ฆฌ

View์™€ Controller๋ฅผ ๋ถ„๋ฆฌํ•˜๊ธฐ ์–ด๋ ต๊ณ , ์žฌ์‚ฌ์šฉ๊ณผ ํ…Œ์ŠคํŠธ๋„ ๋ถˆ๊ฐ€๋Šฅ

 

3. MVP

(์ขŒ) MVP ํŒจํ„ด                                                                                                                          (์šฐ) Cocoa MVP                    

2-1. MVP ๊ตฌ์กฐ

Model : ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ์™€ ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„

View : ์‚ฌ์šฉ์ž์—์„œ ๋ณด์—ฌ์ง€๋Š” UI ๋ถ€๋ถ„

Presenter : View์—์„œ ์š”์ฒญํ•œ ์ •๋ณด๋กœ Model์„ ๊ฐ€๊ณตํ•˜์—ฌ View์— ์ „๋‹ฌ

 

2-2. MVP ๋™์ž‘

์‚ฌ์šฉ์ž์˜ Action๋“ค์€ View๋ฅผ ํ†ตํ•ด ๋“ค์–ด์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

View๋Š” ๋ฐ์ดํ„ฐ๋ฅผ Presenter์— ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

Presenter๋Š” Model์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

Model์€ Presenter์—์„œ ์š”์ฒญ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.

Presenter๋Š” View์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.

View๋Š” Presenter๊ฐ€ ์‘๋‹ตํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ™”๋ฉด์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

 

2-3. MVP ํŠน์ง• 

Presenter๋Š” View์™€ Model์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ๋‘˜์„ ์—ฐ๊ฒฐํ•˜๋Š” ์ ‘์ฐฉ์ œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

Presenter์™€ View๋Š” 1:1 ๊ด€๊ณ„์ž…๋‹ˆ๋‹ค.

View์™€ Model์˜ ์˜์กด์„ฑ์ด ์—†๋‹ค. MVP ํŒจํ„ด์€ MVC ํŒจํ„ด์˜ ๋‹จ์ ์ด์—ˆ๋˜ View์™€ Model์˜ ์˜์กด์„ฑ์„ ํ•ด๊ฒฐ

View์™€ Model ์‚ฌ์ด์˜ ์˜์กด์„ฑ์€ ํ•ด๊ฒฐ๋˜์—ˆ์ง€๋งŒ, View์™€ Presenter ์‚ฌ์ด์˜ ์˜์กด์„ฑ์ด ๋†’์€ ๊ฐ€์ง€๊ฒŒ ๋˜๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ณต์žกํ•ด ์งˆ ์ˆ˜๋ก View์™€ Presenter ์‚ฌ์ด์˜ ์˜์กด์„ฑ์ด ๊ฐ•ํ•ด์ง€๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

4. MVVM

(์ขŒ) MVVM ํŒจํ„ด                                                                                                                                      (์šฐ) Cocoa MVVM

 

3-1. MVVM ๊ตฌ์กฐ

Model : ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ์™€ ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

View : ์‚ฌ์šฉ์ž์—์„œ ๋ณด์—ฌ์ง€๋Š” UI ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

View Model : View๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“  View๋ฅผ ์œ„ํ•œ Model์ž…๋‹ˆ๋‹ค. View๋ฅผ ๋‚˜ํƒ€๋‚ด ์ฃผ๊ธฐ ์œ„ํ•œ Model์ด์ž View๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค

 

3-2. MVVM ๋™์ž‘

์‚ฌ์šฉ์ž์˜ Action๋“ค์€ View๋ฅผ ํ†ตํ•ด ๋“ค์–ด์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

View์— Action์ด ๋“ค์–ด์˜ค๋ฉด, Command ํŒจํ„ด์œผ๋กœ View Model์— Action์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

View Model์€ Model์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

Model์€ View Model์—๊ฒŒ ์š”์ฒญ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.

View Model์€ ์‘๋‹ต ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณตํ•˜์—ฌ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

View๋Š” View Model๊ณผ Data Bindingํ•˜์—ฌ ํ™”๋ฉด์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

 

3-3. MVVM ํŠน์ง•

View Model๊ณผ View๋Š” 1:n ๊ด€๊ณ„

View์™€ Model ์‚ฌ์ด์˜ ์˜์กด์„ฑ์ด ์—†๋‹ค. 

View์™€ ViewModel ์‚ฌ์ด์˜ ์˜์กด์„ฑ์ด ์—†๋‹ค.

๊ฐ๊ฐ์˜ ๋ถ€๋ถ„์€ ๋…๋ฆฝ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“ˆํ™” ํ•˜์—ฌ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค.

MVVM ํŒจํ„ด์˜ ๋‹จ์ ์€ View Model์˜ ์„ค๊ณ„๊ฐ€ ์‰ฝ์ง€ ์•Š๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

 

 

VIPER

nightohl.tistory.com/entry/iOS-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%ED%8C%A8%ED%84%B4-VIPER

 

iOS ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด - VIPER

iOS ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด - VIPER ์›๋ฌธ ์ถœ์ฒ˜ : https://medium.com/ios-os-x-development/ios-architecture-patterns-ecba4c38de52 ๋งˆ์ง€๋ง‰ ์ฃผ์ž VIPER๋Š” MV(X) ์นดํ…Œ๊ณ ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ์ ์ด ํฅ๋ฏธ๋กญ๋‹ค. ์ด์ œ๋Š” ์ฑ…์ž„..

nightohl.tistory.com

 

'iOS ๐ŸŽ > iOS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Managing iOS App's Life Cycle  (0) 2021.02.24
Responding to the Launch of Your App  (0) 2021.02.24
Delegation Pattern  (0) 2021.02.17
Design Pattern  (0) 2021.02.16
View hierarchy  (0) 2021.02.16