MVVM ํจํด์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ์ด๋ฒคํธ ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ์ ๋จ์ํํ๊ธฐ ์ํด ๋ง์ดํฌ๋ก์ํํธ์์ ๋ฐํ๋์์ต๋๋ค. Model, View, View Model๋ก ์ด๋ฃจ์ด์ง ๋์์ธ ํจํด์ ๋๋ค.
์ ํต์ ์ธ UI ๊ฐ๋ฐ์์ ๊ฐ๋ฐ์๋ ๋ชจ๋ ์ฝ๋๋ฅผ View ํด๋์ค์ ์์ฑํ์์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ UI, ๋ฐ์ดํฐ,๋น์ฆ๋์ค ๋์ ์ฌ์ด์ ๊ฐํ ์์กด์ฑ์ด ์๊ธฐ๊ณ ์ ์ง๋ณด์์ ์ข์ง ์์์ต๋๋ค. Android๋ก ์๊ฐํ๋ค๋ฉด Activity๋ Fragment์ ๋ชจ๋ ์ฝ๋๊ฐ ์์ฑ๋๋ ๊ฒ ๊ณผ ๊ฐ์ต๋๋ค. ์ด๋ฌํ ์ด์ ๋ก ์ ์ง๋ณด์๋ฅผ ๊ฐ๋จํ ํ๊ธฐ ์ํด View, Model, Glue Code( = ViewModel) ๊ฐ ์์์ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ๋ MVVM์ ์ฌ์ฉํฉ๋๋ค.
์ฑ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ก ์ฌ์ฉ์์ ์ ๋ ฅ์ ๋ฐ์ต๋๋ค.
ViewModel์ Model๊ณผ View์ ์ธํฐํ์ด์ค ์ญํ ์ ํฉ๋๋ค. ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ๊ณผ ์ปค๋งจ๋ ํจํด์ด ์ด์ฉ๋์ด View์์ ์์กด์ฑ์ด ์์ต๋๋ค.
๐ก MVVM ํจํด์ ์ด์ฉํ์ฌ ํ๋ก๊ทธ๋๋ฐ์ ํ๊ธฐ ์ํด์๋ MVVM ํจํด์ ๋ชฉ์ ์ธ ๊ด์ฌ์ฌ ๋ถ๋ฆฌ๋ฅผ ํ๊ธฐ์ํด View์ Model, View์ View Model์ ์๋ก ์์กดํ์ง ์๋๋ก ์ค๊ณ๋์ด์ผํฉ๋๋ค.Android์์๋ ๊ด์ฌ์ฌ ๋ถ๋ฆฌ์ ๋ชจ๋ธ์์ UI๋ฅผ ๋์ถํ๋ ๊ฒ์ ์ฃผ์ ์์น์ผ๋ก ๋งํ๊ณ ์์ต๋๋ค.
Android์์ View, Model, View Model์ ์๋์ ๊ฐ์ด ๊ตฌ์ฑํ๋ฉด Android App Architecture Guide์ ๋ง๊ฒ MVVM ํจํด ์ ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
Activity, Fragment, xml์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. AAC LiveDta๋ฅผ ํ์ฉํ์ฌ ViewModel์ ์์ฑ๋์ด์ง ๋ผ์ด๋ธ ๋ฐ์ดํฐ๊ฐ์ฒด๋ฅผ ๊ตฌ๋ ํ๊ณ ํด๋น ๋ฐ์ดํฐ ์ํ์ ๋ฐ๋ผ ์ฌ์ฉ์์๊ฒ ํ๋ฉด์ ๋ณด์ฌ์ค๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋ด๋ถ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ Room๊ณผ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๋ Http Client ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ํ๋ฉด ํ์ ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ง๋๊ณ , ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ณ ๋ คํ์ฌ UI ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ AAC ViewModel์ ์ด์ฉํ์ฌ ๊ตฌ์ฑ๋ฉ๋๋ค. AAC Data Binding์ ์ฌ์ฉํ์ฌ MVVM ํจํด์์ ์๋ฏธํ๋ ViewModel์ฒ๋ผ ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
๐ก AAC ViewModel ์ด์ฉ์ ViewModel์ onCleared() ํจ์๋ฅผ ์ฌ์ ์ํ์ฌ ํด๋น ํจ์ ์คํ์ ์งํ์ค์ด๋ ๋น๋๊ธฐ ์์ ๋ค์ด release ๋๋๋ก ์ฝ๋๊ฐ ์์ฑ๋์ด์ผ ํฉ๋๋ค.