์ฐธ๊ณ ์ฌ์ดํธ ๐
iOS MVVM Tutorial: Refactoring from MVC
In this iOS tutorial, you’ll learn how to convert an MVC app into MVVM. In addition, you’ll learn about the components and advantages of using MVVM.
www.raywenderlich.com
ํ๋ก๊ทธ๋๋ฐ์ ํ๋ค๋ณด๋ฉด ์ด๋ป๊ฒ ์์กด์ฑ์ ์ค์ด๊ณ ๊ฐ ํน์ง์ ๋ง๊ฒ ํด๋์ค๋ฅผ ๋ถ๋ฆฌํ๋ฉฐ ๋ณต์กํ๊ณ ๋์กํ ์ฝ๋๋ฅผ ๊น๋ํ๊ฒ ์ ์งํ๋ ค๋ ๋ ธ๋ ฅ์ ๋ณผ ์ ์๋ค. ์น ํ๋ก๊ทธ๋๋ฐ์์๋ MVC๋ฅผ ๋ฐฐ์ฐ๊ฒ ๋๋๋ฐ ์ด๋ M์ model์ ์ฝ์๋ก ๋ฐ์ดํฐ์ ๋ชจ์์ด๋ ๋ฐ์ดํฐ ํด๋์ค, ๋ฐ์ดํฐ ๊ฐ์ฒด ๋ฑ์ ์๋ฏธํ๋ค. V๋ view์ ์ฝ์๋ก์ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๋ ํ๋ฉด์ ๋งํ๋๋ฐ, ์ ๋ ฅ์ ๋ฐ์ controller๋ก ๋ณด๋ด๊ฑฐ๋ model์์ controller ์ ๊ฑฐ์น ๋ฐ์ดํฐ๋ฅผ ๋จ์ํ ๋ณด์ฌ์ค๋ค. ์ด๋ Model ๊ณผ View ์ฌ์ด์์ ์ํธ์์ฉ์ ํ๋๋ก ํ๋ ๊ฒ์ด Controller์ ์ญํ์ด๋ค.
iOS ๋ํ ์ ์ง๋ณด์์ ๋จ์ํ ์คํธ, ๋ณต์ก์ฑ์ ๋ฎ์ถ๊ธฐ ์ํด MVC์ ๊ฐ์ ์ํคํ ์ฒ ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐํ๊ณ ์๋ค. MVC ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ view์์ ์ง์ ์ ์ผ๋ก model์ ์ ๊ทผํ์ง ์์๋ ๋๋ฏ๋ก ๋ทฐ์ ๋ชจ๋ธ์ด ๋ ๋ฆฝ๋์ด ์ปจํธ๋กค๋ฌ์ ์ํด ์ฐ๊ฒฐ๋๋ค. ํ์ง๋ง ์ด๋ฐ MVC๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ Controller์ ์ญํ์ด ์ปค์ ธ ์ฝ๋๋์ด ๋ง์์ง๋ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด MVVM ํจํด ๋ชจ๋ธ์ด ์์ฃผ ์ธ๊ธ๋๊ณ ์๋ค.
MVVM์ Model, View, ViewModel 3๊ณ์ธต์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
Model : ์ฑ์ ์๋์ํค๋ ์ฑ ๋ฐ์ดํฐ๋ก์ ํ๋ฉด์ ๋ณด์ฌ์ค ์ ๋ณด ๋ฑ ํฌํจ๋๋ค.
View : ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ์๊ฐ์ ์ธ ์์์ด๋ค. iOS์์๋ ๋ทฐ์ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ฅผ ์์ ํ ๋ถ๋ฆฌ์ํฌ ์ ์๋ ๊ด๊ณ์ด๊ธฐ ๋๋ฌธ์ view์์ view controller์ view๋ฅผ ํจ๊ป ์๊ฐํ๋ฉด ๋๋ค.
View Model : ๋ทฐ์์ ์ฌ์ฉ์๋ ํน์ ๋ค๋ฅธ ์ด์ ๋ก ๊ฐ์ด ์ ๋ฐ์ดํธ ๋๋ฉด model์ ์ ๋ฐ์ดํธ ์ํค๋ฉฐ, ๋ชจ๋ธ์ ๊ฒฐ๊ณผ๋ฅผ ๋ทฐ์ ์ ๋ฐ์ดํธ ์ํค๋ ์ญํ์ ํ๋ค.
๊ธฐ์กด์ ์ํคํ ์ณ์ ์กฐ๊ธ ๋ ์ฃผ๋ชฉํด์ผ ํ ๋ถ๋ถ์ด ์๋ค๋ฉด View Model ์ด๋ผ๊ณ ์๊ฐํ๋ค. ์ด์ฐ๋ณด๋ฉด ๊ธฐ์กด์ ํ๋ ์์ํฌ์์ ViewController์ ์ญํ๊ณผ ํฌ๊ฒ ๋ฌ๋ผ๋ณด์ด์ง ์์ง๋ง View Model์ UIKit์ ViewController๊ฐ ๊ทธ ์ธ ์๋น์ค๋ Model์ ๋ํ ์กฐ์์ View Model์ด ์ํํ๋ค. ๋ฐ๋ผ์ ViewController๋ view model์ ์ฌ์ฉํ์ฌ ๋ทฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ธ๋ฉํ๋ฉฐ MVC์ ๋นํด ViewController์ ์ฝ๋ ๊ธธ์ด๊ฐ ๊ฐ๋จํด์ง๋ ์ฅ์ ์ด ์๋ค. ํ์ง๋ง ์ฌ๊ธฐ์๋ ViewModel์ด ๋ฌด๊ฑฐ์์ง๋ ๋จ์ ๋ฑ์ด ์๋ค.
ViewModel์ Model๊ณผ service์ ์ ๊ทผํ์ฌ ๊ฐ์ ์ ๊ทผํ ์ ์์ผ๋ฉฐ view controller ๋ view model์ ํตํด view์ ์๋ ๊ฐ๋ค์ ๋ฐ์ธ๋ฉ ํ๋ฏ๋ก ์ด๋ป๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ธ๋ฉ ํ ์ ์๋์ง์ ๋ํด ์๊ฐํด ๋ณผ ํ์๊ฐ ์๋ค.
์ฌ๊ธฐ์๋ key-value Observing (KVO) , FRP (Functional apple programming. ex - RxSwift, ReactiveSwift..), Delegation, Boxing ๋ฑ์ด ์๋ค. ์ฌ๊ธฐ์ Boxing์ ๊ฐ์ ๋ณ๊ฒฝ์ ์ถ์ ํ๊ธฐ ์ํด ์ต์ ๋ฒ ํจํด ํ์์ ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ๋ค.
์ด์ํ ๋ด์ฉ์ด๋ ์๋ชป๋ ๊ฒ์ด ์๋ค๋ฉด ๋๊ธ๋ก ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค!!
๋๊ธ