๐กํด๋น ๊ธ์ ์ฑ ์ํคํ ์ฒ ๊ฐ์ด๋๋ฅผ ์ดํดํ๊ธฐ ์ฝ๊ฒ ์ ๋ฆฌํ ๊ธ์ ๋๋ค.
ํ์๋ ๋ณธ์ธ์ ์ฑ์ด ํด๊ฒฐํด์ผํ๋ ๋ฌธ์ ๋ค์ ๊ฐ์ฅ ์ ํฉํ ์ํคํ ์ฒ๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ํ ์ฝ๋๊ฐ ์ด๋์์/์ด๋ป๊ฒ ๋์ ํ ์ง ์ดํดํ๊ณ ์์ธกํ๊ธฐ ์ฌ์์ผํ์ฃ .
"์ด๋ป๊ฒํ๋ฉด ์ข์ ์ํคํ ์ฒ๋ก ์งค ์ ์์๊น?"๋ฅผ ๊ฒ์ํ๋ค ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฐ๋ ๋ค์ ์ ํ๊ฒ๋ฉ๋๋ค.
๊ฐ๋ฐ์๋ค์ด๋ผ๋ฉด ๋ชจ๋ ํ๋ฒ์ฏค ๋ณธ ๊ทธ ๊ณผ๋ ํ.
MVC MVP MVI์ ํจ๊ป ๋ง์ด ์ฐ์ด๋ ์ํคํ ์ฒ ํจํด
์ด๋ฌํ ๋ด์ฉ๋ค์ ์๋ฃ๊ฐ ๋ฐฉ๋ํ๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์์๋ ๋ฐ๋ก ์ค๋ช
ํ์ง ์๋๋ก ํ๊ฒ ์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด๋ฌํ ๊ฐ๋
๋ค์ ์๋๋ก์ด๋์์๋ ์ด๋ป๊ฒ ์ ์ฉํดํํ ๊น์?
์ฌ์ค ์ ๋ต์ ์กด์ฌํ์ง ์์ต๋๋ค.
ํ์ฌ๋ง๋ค ์ฑ์ ๊ธฐ๋ฅ์ด ๋ค๋ฅด๊ณ ๊ฐ๋ฐ์๋ค์ ์๊ฐ์ด๋ ์คํ์ผ๋ ์ ๊ฐ๊ฐ์ด๋๊น์.
"๊ทธ๋ ๋ค๋ฉด ์ฐ๋ฆฌ๋ ์ด๋ฌํ ์ํคํ ์ฒ๋ฅผ ์ด๋ป๊ฒ ๊ณต๋ถํด์ผ ํ ๊น์?"
ํ์์ ๊ฒฝ์ฐ ์ด ๋ฌธ์๋ฅผ ํตํด ์ง๋ฌธ์ ๋ํ ๋ต์ ์ป์ ์ ์์์ต๋๋ค.
ํด๋น ๊ธ์ ์๋๋ก์ด๋ ๊ณต์๋ฌธ์์ ์ฑ ์ํคํ ์ฒ ๊ฐ์ด๋ ๊ฐ์๋ฅผ ์ดํดํ๊ธฐ ์ฝ๊ฒ ์ ๋ฆฌํ ๊ธ์ ๋๋ค.
Activity์ Fragment๋ ์ต๋ํ ๊ฐ๋ณ๊ฒ ์ ์งํด์ผํ๋ฉฐ UI Logic๋ง์ ํฌํจํด์ผ ํฉ๋๋ค.
๋ํ Context๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋๋ ๋ชจ๋ ์ฌ๊ธฐ์์ ์ฒ๋ฆฌ๋์ด์ผ ํฉ๋๋ค.
Room, DataStore์ ๊ฐ์ ๊ณณ์ ์ ์ฅ๋๋ ์ง์์ ์ธ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก UI๋ฅผ ๊ตฌ์ฑํด์ผํฉ๋๋ค.
์ฌ๊ธฐ์์ ์ค๋ช ํ๋ ์ง์์ ์ธ ๋ฐ์ดํฐ๋ ViewModel์ ์ ์ฅ๋ ๋ฐ์ดํฐ(์ํ๋ผ๊ณ ํํํฉ๋๋ค.)๊ฐ ์๋ ์ฑ์ ์ข ๋ฃํด๋ ์ ์ฅ๋๋ ๋ฐ์ดํฐ์ ๋๋ค.
ํน์ ์ ํ ๋ฐ์ดํฐ์ ๋ชจ๋ ๋ณ๊ฒฝ์ฌํญ์ ํ ๊ณณ์์ ์ฒ๋ฆฌํด์ผํฉ๋๋ค.
์ด๋ฅผ ํตํด ๋ณธ์ธ์ด ์ง ์ฝ๋๊ฐ ์๋๋๋ผ๋ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ด ์ด๋์์ ์ผ์ด๋ ์ง ์์ธกํ ์ ์๊ฒ๋ฉ๋๋ค.
์ํ : Repository -> ViewModel -> View ๋ฐฉํฅ์ผ๋ก๋ง ์ ๋ฌํด์ผํฉ๋๋ค.
์ด๋ฒคํธ : View -> ViewModel -> Repository ๋ฐฉํฅ์ผ๋ก๋ง ์ ๋ฌํด์ผํฉ๋๋ค.
์ด๋ฌํ ์ผ๊ด์ฑ์ผ๋ก ์ธํด ์ฝ๋๊ฐ ์ด๋์์/์ด๋ป๊ฒ ๋์ ํ ์ง ์์ธกํ ์ ์๊ฒ๋ฉ๋๋ค.
์ํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก UI๋ฅผ ํ์ํ๋ ์์ญ
์ฌ์ฉ์์์ ์ํธ์์ฉ(ex. ํด๋ฆญ ์ด๋ฒคํธ)๊ณผ ์ํ ๋ณ๊ฒฝ์ ๋ฐ๋ผ UI๊ฐ ์๋์ผ๋ก ์
๋ฐ์ดํธ ๋์ด์ผํฉ๋๋ค.
UI๋ ๋ค์๊ณผ ๊ฐ์ ๋ ๊ฐ์ง๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
Activity์ Fragment๋ UI Logic์ ์ฒ๋ฆฌํ ๋ UI Controller๋ผ๊ณ ๋ ๋ถ๋ฆฝ๋๋ค.
ViewModel์ UI์ ์ฌ์ฉ๋ ์ํ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ ์ด๋ฒคํธ์ ๋ํ ๋ก์ง์ ์ฒ๋ฆฌํฉ๋๋ค.
์ด๋ฒคํธ์ ๋ํ ๋ก์ง์ ํด๋ฆญ ์ด๋ฒคํธ์ ๊ฐ์ ์ํฉ์ ์ํํด์ผํ ๋น์ฆ๋์ค ๋ก์ง์ ์ ์ ํ ์ ์ฅ์ ํด๋์ค์ ์์ํ๋ ๊ฒ์ ๋๋ค.
ํน์ ์ฌ๊ธฐ์์ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๋ ์ค๊ณ๋ฅผ ํ ์๋ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ Repository๋ ๋จ์ํ ๋ฐ์ดํฐ ์์ค๋ค์ ๋ชจ์๋์ ์ ์ฅ์์ ์ญํ๋ง์ ์ํํฉ๋๋ค.
Business Logic์ ์ฒ๋ฆฌํ๋ ์์ญ
์ฑ์์ ์ฒ๋ฆฌํ๋ ๋ค์ํ ์ ํ์ ๋ฐ์ดํฐ๋ณ๋ก Repository๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํด์ผํฉ๋๋ค.
Repository๋ ํ์ผ, ๋คํธ์ํฌ, ๋ก์ปฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ์ DataSource๋ค์ ํ ๊ณณ์ผ๋ก ๋ชจ์ ๊ด๋ฆฌํ๋ ์ ์ฅ์ ํด๋์ค์
๋๋ค.
UI Layer์ Data Layer ์ฌ์ด์ ์๋ ์์ญ
๋ณต์กํ ๋น์ฆ๋์ค ๋ก์ง์ด๋ ์ฌ๋ฌ ViewModel์์ ์ฌ์ฌ์ฉ๋๋ ๊ฐ๋จํ ๋น์ฆ๋์ค ๋ก์ง์ ์บก์ํ๋ฅผ ๋ด๋นํฉ๋๋ค.
ํ์ํ ๊ฒฝ์ฐ ์ ํ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํด๋น ๋ ์ด์ด๋ค์ ์์ธํ ์ค๋ช ์ ๋ค์ ๊ธ์์ ๋ถํฐ ์์ฐจ์ ์ผ๋ก ๋ค๋ฃจ๊ฒ ์ต๋๋ค.
์์กด์ฑ ์ฃผ์
์ ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์๋น์ค ๋ก์ผ์ดํฐ ํจํด์ผ๋ก ์ง์ ๊ตฌํ ๊ฐ๋ฅํฉ๋๋ค.
Hilt
Dagger
Koin
๋ฑ์ด ์์ผ๋ฉฐ ๊ณต์๋ฌธ์์์๋ Hilt
์ ์ฌ์ฉ์ ๊ถ์ฅํ๊ณ ์์ต๋๋ค.
์๋์ ๋ชฉ๋ก์ ๊ณต์๋ฌธ์์์ ๊ถ์ฅํ๋ ์ฌํญ๋ค์ ๋๋ค.
https://developer.android.com/topic/architecture?hl=ko
https://developer.android.com/courses/android-basics-kotlin/course
https://github.com/android/sunflower/tree/main
https://fastcampus.co.kr/dev_red_ksr