์ด ํ๋ก์ ํธ๋ ์ต๊ทผ Jetpack Compose์๋ MVI๏ฟฝ๏ฟฝ ๋ ์์ฐ์ค๋ฝ๊ณ ์ ํฉํ๋ค๋ ์๊ฒฌ์ด ๋ง์์ง๋ ํ๋ฆ ์์์,
๊ณผ์ฐ ๊ทธ ์ฃผ์ฅ์ด ํญ์ ๋ง๋์ง ์ง์ ๊ตฌ์กฐ๋ฅผ ์ค๊ณํ๊ณ ํ
์คํธํด๋ณด๊ธฐ ์ํด ์์๋์์ต๋๋ค.
๋จ์ํ MVI๋ฅผ ์ ์ฉํ๋ ๋ฐ ๊ทธ์น์ง ์๊ณ ,
MVVM(๋จ๋ฐฉํฅ ํ๋ฆ ๊ธฐ๋ฐ)๊ณผ ๋น๊ตํด ํ์ฅ์ฑ, ๋ณต์ก๋, ํ์
์ธก๋ฉด์์ ์ด๋ค ์ฐจ์ด๊ฐ ์๋์ง ๊ฒ์ฆํ๋ ๊ฒ์ด ํต์ฌ ๋ชฉํ์
๋๋ค.
**MVI (Model - View - Intent)**๋ UI ์ํ๋ฅผ ๋จ์ผ ๊ฐ์ฒด(State)๋ก ์ ์ํ๊ณ ,
์ฌ์ฉ์์ ์ธํฐ๋์
์ ๋ช
์์ ์ธ Event(Intent)๋ก ์ ๋ฌํ๋ฉฐ,
์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ ๊ฒฐ๊ณผ๋ฅผ ์๋ก์ด State์ ์ผํ์ฑ Effect๋ก ๋ถ๋ฆฌํ๋ ๋จ๋ฐฉํฅ ํ๋ฆ ๊ธฐ๋ฐ ์ํคํ
์ฒ์
๋๋ค.
User Action โ Event(Intent) โ ViewModel โ State / Effect โ View
๋๋ถ๋ถ์ MVVM ๊ธฐ๋ฐ Android ํ๋ก์ ํธ์์๋ ์ค์ ๋ก๋
์๋ฐฉํฅ ๋ฐ์ธ๋ฉ ์์ด ๋จ๋ฐฉํฅ ํ๋ฆ์ผ๋ก ViewModel์ ํธ์ถํ๊ณ ,
LiveData ๋๋ StateFlow๋ก ์ํ๋ฅผ ๊ตฌ๋
ํ๋ ๋ฐฉ์์ด ์ฌ์ฉ๋ฉ๋๋ค.
์ฆ, MVVM์ด๋ผ๊ณ ๋ถ๋ฅด์ง๋ง, ๊ตฌ์กฐ์ ์ผ๋ก๋ MVI์ ์ ์ฌํ ํํ๋ก ์ฐ๊ณ ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ ์ฝ๋ ํจํด์ MVI์ ๋งค์ฐ ์ ์ฌํฉ๋๋ค:
viewModel.onEvent(SomeUiEvent) // MVI์ Intent์ ์ ์ฌ
viewModel.uiState.collectAsState() // MVI์ State ๊ตฌ๋
๊ณผ ๋์ผ๊ฒฐ๊ตญ ๋ช ์์ ์ผ๋ก Intent / State / Effect๋ฅผ ๋๋๋๊ฐ, ์๋๋ฉด ๊ทธ๊ฑธ ViewModel ๋ด์์ ๋ฌถ์ด์ MVVM ํํ๋ก ์ฐ๋๊ฐ์ ์ฐจ์ด์ ๋๋ค.
์ด๋ฆ์ ๋ช ํํ ๊ตฌ๋ถํ๊ณ ์ญํ ์ ๋๋๋ ๊ฒ์ ํ ๋จ์ ํ์ ์ด๋ ์ ์ง๋ณด์์ ์์ด ๋ช ํํ ์ด์ ์ ๊ฐ์ง๋๋ค.
๊ทธ๋ฌ๋ MVI๋ ๊ตฌ์กฐ์ ๋ช
ํ์ฑ์ ๋๊ฐ๋ก ๋ณด์ผ๋ฌ๏ฟฝ๏ฟฝ๋ ์ดํธ๊ฐ ์ฆ๊ฐํ๊ณ ,
๋จ์ํ ํ๋ฉด์์๋ ์คํ๋ ค ๊ณผ๋ํ ์ค๊ณ๊ฐ ๋ ์ ์์ต๋๋ค.
๐ ๊ฒฐ๊ตญ ์ค์ํ ๊ฑด ํ๋ฉด์ ๋ณต์ก๋์ ํ์ ํฉ์ ์์ค์ ๋ฐ๋ผ ์ ์ฐํ๊ฒ ์ ํํ๋ ๊ฒ์
๋๋ค.
์ํคํ
์ฒ๋ ๋๊ตฌ์ผ ๋ฟ, ์ ๋ต์ ์์ต๋๋ค.