ํ์๋ ์๋๋ก์ด๋ ๊ฐ๋ฐ ๋ฐ ๊ด๋ จ ๊ณต๋ถ๋ฅผ ์ฝ 1๋ ๋ฐ ์ ๋ ํด์์ต๋๋ค..! ์ฐ์ฐํ ๊ธฐํ๋ก ์ ํ๊ฒ ๋ ์๋๋ก์ด๋ ๊ฐ๋ฐ์ด์์ง๋ง ํ์์ ๊ฐ๋ฐ ์ ์ฑ๊ณผ ์ฑํฅ์ ์ ๋ง์ ๊พธ์คํ ๊ณต๋ถํ๊ณ ์์ต๋๋ค ใ ใ
์ด ํฌ์คํ ์์๋ ํ์๊ฐ ์ฝ ํ ๋ฌ ์ ์ฏค ๊ณต๋ถํ๊ณ , ์ค์ ํ๋ก์ ํธ์ ์ ์ฉํด๋ณธ ์๋๋ก์ด๋ ๊ถ์ฅ ์ํคํ ์ฒ ์ ๋ํด ์๊ฐํด๋ณด๋ ค ํฉ๋๋ค!
๋ณธ ํฌ์คํ ๋ด์ฉ์ ๋๋ถ๋ถ์ Android Developer ์ฌ์ดํธ์ "์ฑ ์ํคํ ์ฒ ๊ฐ์ด๋" ๋ฌธ์๋ฅผ ๋ฐํ์ผ๋ก ์์ฑ๋ ๊ฒ์ด๋ฉฐ ํด๋น ๋ฌธ์๋ฅผ ํ์๊ฐ ์ดํดํ๋๋ก ์์ฑํ ์์ ์ ๋๋ค. (์๋ชป๋ ์ดํด๋ก ์ค๊ฐ๋ ์ด ์์ ์ ์์ผ๋ ํผ๋๋ฐฑ ํ์์ ๋๋ค~ ใ ใ )
์๋๋ก์ด๋ ๊ถ์ฅ ์ํคํ
์ฒ์ ๋ํด ์๊ฐํ๊ธฐ ์ ์!
์๋๋ก์ด๋ ๊ถ์ฅ ์ํคํ
์ฒ๊ฐ ์กด์ฌํ๋ ์ด์ ์ ์ด์ ๋ฐ๋ผ์ผ ํ๋ ์ด์ ์ ๋ํด ์์๋ด
์๋ค~
์๋๋ก์ด๋ ๊ฐ๋ฐ์๊ฐ ์ฑ์ ๊ฐ๋ฐํ๋๋ฐ ์์ด ๊ณ ๋ คํด์ผ ํ๋ ๊ฒ์ด ์์ต๋๋ค. ๋ฐ๋ก ๋ชจ๋ฐ์ผ ์ฑ ์ฌ์ฉ์ ํ๊ฒฝ ์ด๋ผ๋ ๊ฒ์ ๋๋ค.
๋ชจ๋ฐ์ผ ์ฑ ์ฌ์ฉ์ ํ๊ฒฝ์ด๋ผ๋ ๊ฒ์ด ๋ฌด์์ธ์ง ์ดํดํ๊ธฐ ์ํด ์ด์ ๋ถํฐ ์ฐ๋ฆฌ๋ ๋ชจ๋ฐ์ผ ํฐ์ ์ฌ์ฉํ๋ ์ฌ์ฉ์๊ฐ ๋์ด๋ด ์๋ค!
์ ์ ๊ฐ ๋์ด SNS ์ฑ์ ์ฌ์ง์ ์
๋ก๋ ํ๋ ๊ณผ์ ์ ์๊ฐํด ๋ด
์๋ค.
SNS ์ฑ์ ์ฌ์ง์ ์
๋ก๋ ํ๊ธฐ ์ํด์๋ ์ ์ผ ๋จผ์ SNS ์ฑ์์ ์นด๋ฉ๋ผ ๊ธฐ๋ฅ์ ์คํ์์ผ์ผ ํ ๊ฒ ์
๋๋ค. ์ด๋ฅผ ์ํด SNS ์ฑ์ด ์นด๋ฉ๋ผ ์ธํ
ํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํ ๊ฒ์ด๊ณ , Android ์ด์์ฒด์ ๋ ์ด ์์ฒญ์ ๋ฐ๋ผ ์นด๋ฉ๋ผ ์ฑ์ ์คํ์ํฌ ๊ฒ ์
๋๋ค.
์ด ์๊ฐ์ ์ฌ์ฉ์๋ ์นด๋ฉ๋ผ ์ฑ์ผ๋ก ์ด๋ํจ์ผ๋ก์จ SNS ์ฑ์์ ๋๊ฐ ์ํฉ์ด์ง๋ง ์ฌ์ฉ์ ํ๊ฒฝ์ ๋์์์ด ์ฐ๊ฒฐ๋์ด ์๋ ์ํ๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
์นด๋ฉ๋ผ ์ฑ์ผ๋ก ์ฌ์ง์ ์ฐ์ ์ ์ ๋ ๋ค์ SNS ์ฑ์ผ๋ก ๋์์์ ์จ๋ฒ์ ๋ณด๊ธฐ ์ํด ์จ๋ฒ ์ธํ ํธ๋ฅผ ํธ๋ฆฌ๊ฑฐ ํ ๊ฒ์ ๋๋ค. ์จ๋ฒ์์ ์ ๋ก๋ํ ์ฌ์ง์ ์ ํํ ์ ์ ๋ ๋ค์ SNS ์ฑ์ผ๋ก ๋์์์ ์ ๋ก๋ ๊ธฐ๋ฅ์ ํตํด ์ฌ์ง์ ์ ๋ก๋ ํ๊ฒ ๋ฉ๋๋ค.
์ฌ๊ธฐ์ ์ค์ํ ๊ฒ์ ์ด ๊ณผ์ ์์ ์ธ์ ๋ ์ง ์ ํ๋ ์๋ ๋ฑ์ ์ํด ์ด์ด์ง๋ ์ฌ์ฉ์ ํ๊ฒฝ์ ํ๋ฆ์ด ๋๊ธธ ์๋ ์๋ค ๋ ๊ฒ์ ๋๋ค!
์์ ๊ฐ์ ๊ณผ์ ์ ๋ชจ๋ฐ์ผ ์ฑ ์ฌ์ฉ์ ํ๊ฒฝ์ด๋ผ๊ณ ์ดํดํ๋ฉด ์ฝ์ต๋๋ค. ๋ชจ๋ฐ์ผ ํ๊ฒฝ์์๋ ์ฌ์ฉ์๋ค์ด ๋ค์ํ ์ฑ์ ์๋ ๋๋ ์์ด ๋ฐ๊พธ๋ฉด์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ฐ์ผ ์ฑ ์ฌ์ฉ์ ํ๊ฒฝ์ด ์ค๋จ๋๊ณ ๋ค์ ์ด์ด์ง๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ด ๋ฐ์ํฉ๋๋ค.
๋ฐ๋ผ์ ์ฑ์ ์ด๋ฌํ ์ฌ์ฉ์ ํ๊ฒฝ ํ๋ฆ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ๋๋ก ์ค๊ณ๋์ด์ผ ํฉ๋๋ค.
์ ์ค๋ช ์ ํตํด ์๋๋ก์ด๋ ์ฑ์ ๊ตฌ์ฑํ๋ ์ปดํฌ๋ํธ๋ค์ ์ฌ์ฉ์ ํ๊ฒฝ ํ๋ฆ์ ๋ฐ๋ผ ๊ฐ๋ณ์ ์ด๊ณ ๋น์์ฐจ์ ์ผ๋ก ์คํ๋ ์ ์์ผ๋ฉฐ ์ฌ์ฉ์๊ฐ ์ธ์ ๋ ์ง ์ฑ ์ปดํฌ๋ํธ๋ฅผ ์ ๊ฑฐํ ์ ์๋ค๋ ๊ฒ๋ ์ดํดํ ์ ์์ ๊ฒ์ ๋๋ค.
๊ฐ๋ฐ์๊ฐ ์ด๋ฌํ ์ฌ๋ฌ ์ฌ์ฉ์ ํ๊ฒฝ ํ๋ฆ์ ์ง์ ์ ์ดํ ์ ์๊ธฐ ๋๋ฌธ์ "์ฑ ๊ตฌ์ฑ์์๊ฐ ์๋ก ์ข ์๋์ด ์์ด์๋ ์๋๋ฉฐ ์ฑ ๊ตฌ์ฑ์์๊ฐ ์ฑ ๋ฐ์ดํฐ๋ ์ํ๋ฅผ ์ ์ฅํ๊ณ ์์ด์๋ ์๋ฉ๋๋ค."
์ ๋ด์ฉ์ ํตํด ์ฐ๋ฆฌ๋ ์ฑ ๊ตฌ์ฑ์์๊ฐ ์๋ก ์ข ์๋์ด ์๊ฑฐ๋ ์ฑ ๊ตฌ์ฑ์์๊ฐ ์ฑ ๋ฐ์ดํฐ๋ ์ํ๋ฅผ ์ ์ฅํ๊ณ ์์ด์๋ ์๋๋ค๋ ์ฌ์ค์ ์๊ฒ ๋์์ ๊ฒ์ ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด์ ์ด๋ฌํ ์์น์ ์ด๋ค ๋ฐฉ๋ฒ์ผ๋ก ์ง์ผ์ผ ํ๋์ง๊ฐ ๊ถ๊ธํด์ง ๊ฒ ์
๋๋ค.
์ด ๊ถ๊ธ์ฆ์ ๋ํ ๋ต์ ๋ฐ๋ก ์๋๋ก์ด๋ ๊ถ์ฅ ์ํคํ
์ฒ ๋ฅผ ์งํค์ ์
๋๋ค!
์๋๋ก์ด๋ ๊ถ์ฅ ์ํคํ ์ฒ๋ฅผ ๊ทธ๋ฆผ์ผ๋ก ํํํ์๋ฉด ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ต๋๋ค.
์ ๊ทธ๋ฆผ์ ํตํด ๊ฐ ๊ตฌ์ฑ์์(Activity/Fragment, ViewModel, Repository, Model ๋ฑ)๋ค์ด ๋ฑ ํ ๋จ๊ณ ์๋์ ๊ตฌ์ฑ์์์๋ง ์ข ์๋์ด ์๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, Activity/Fragment๋ ViewModel์๋ง ์ข ์๋์ด ์์ผ๋ฉฐ Repository ๋ Model์๋ ์ข ์๋์ด ์์ง ์์ต๋๋ค.
๊ทธ๋ผ ์ด์ ๋ถํฐ ์์ ๊ฐ์ ์๋๋ก์ด๋ ๊ถ์ฅ ์ํคํ
์ฒ ๊ตฌ์กฐ๋ฅผ ๋ง์กฑ์ํค๋ ์ฌ์ฉ์ ํ๋กํ ๊ธฐ๋ฅ ์ ๊ตฌํํด๋ด
์๋ค!
(์ค์ ์ฝ๋๋ฅผ ํตํ ๊ตฌํ์ ์๋๋ฉฐ ์ดํด๋ฅผ ๋๊ธฐ ์ํ ์ค๋ช
์
๋๋ค~)
๊ฐ์ฅ ๋จผ์ ์ฌ์ฉ์ ํ๋กํ UI๋ฅผ ์ํด user_profile_layout.xml ํ์ผ๊ณผ UserProfileFragment.kt ํ์ผ์ ์์ฑํ๋ค๊ณ ๊ฐ์ ํฉ์๋ค.
์ด ๋ ํ์ผ์ ์์ฑํ ๋ค์์ผ๋ก๋ ViewModel ํ์ผ์ ์์ฑํด์ผ ํฉ๋๋ค. ์์ ๋ณด์ฌ๋๋ฆฐ ์๋๋ก์ด๋ ๊ถ์ฅ ์ํคํ ์ฒ ๊ทธ๋ฆผ์์ Activity/Fragment ๊ตฌ์ฑ์์์ ๋ฐ๋ก ์๋ ๋จ๊ณ์ ViewModel ๊ตฌ์ฑ์์๊ฐ ์์์์ ์๊ฐํด๋ณด๋ฉด ViewModel ํ์ผ์ ์์ฑํด์ผ ํจ์ ์ดํดํ ์ ์์ ๊ฒ์ ๋๋ค.
ViewModel ํ์ผ์ ์์ฑํ๊ธฐ ์ ์ ViewModel์ ์ญํ ์ ๋ํด ๊ฐ๋จํ ์์๋ด ์๋ค.
"ViewModel์ UI ๊ตฌ์ฑ์์์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๊ณ Model๊ณผ ์ปค๋ฎค๋์ผ์ด์ ํ๊ธฐ ์ํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋น์ฆ๋์ค ๋ก์ง" ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
์ฆ, UI ๊ตฌ์ฑ์์์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ Model์์ ๊ฐ์ ธ์จ ํ, ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ UI ๊ตฌ์ฑ์์์ ์ ๋ฌํด์ฃผ๋ ์ค๊ฐ ๋งค๊ฐ์ฒด๋ผ๊ณ ์ดํดํด๋ด ์๋ค!
์ด ๋, ViewModel์ด ๋ฐ๋์ ์ง์ผ์ผ ํ๋ ์์น์ ViewModel์ UI ๊ตฌ์ฑ์์์ ๋ํด ์์ง ๋ชปํด์ผ ํ๋ฉฐ ์ด๋ฅผ ํตํด ViewModeldms Activity/Fragment์ ์๋ช ์ฃผ๊ธฐ ๋ณํ์ ์ํฅ์ ๋ฐ์ง ์๋๋ค ์ ๋๋ค.
์กฐ๊ธ ๋ ์ฝ๊ฒ ํ์ด ์ค๋ช ํด๋ณด๋ฉด ViewModel์ ์์ ์ด Model์์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ ์ด๋ค UI ๊ตฌ์ฑ์์์ ์ค์ผ ํ๋์ง๋ ๋ชจ๋ฅธ๋ค๋ ๋ป์ ๋๋ค. ๋จ์ง 'Model์์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ UI ๋จ์ ๋๊ฒจ์ฃผ๊ธฐ'์ ์์ ๋ง ํ๋ ๊ฒ์ด ViewModel ์ ๋๋ค.
UserViewModel.kt ํ์ผ์ ์์ฑํ ํ, Repository ํ์ผ์ ์์ฑํด์ผ ํฉ๋๋ค. ์ด ๋๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์์์ ๋ณด์ฌ์ค ์๋๋ก์ด๋ ๊ถ์ฅ ์ํคํ ์ฒ ๊ทธ๋ฆผ์ ์ฐธ๊ณ ํ๋ฉด ViewModel์ ๋ฐ๋ก ์๋ ๋จ๊ณ์ Repository๊ฐ ์๋ฆฌ ์ก๊ณ ์์์ ํ์ธํ ์ ์์ต๋๋ค.
Repository ํ์ผ์ ์ค์ ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ์์ ์ ๋ด๋นํ๋ ๊ณณ ์ ๋๋ค.
์ฐ๋ฆฌ๊ฐ ์ฌ์ฉ์ ํ๋กํ์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๋ฅผ server์์ ๊ฐ์ ธ์จ๋ค๊ณ ๊ฐ์ ํ๋ค๋ฉด Retrofit ๋ผ์ด๋ธ๋ฌ๋ฆฌ(์๋๋ก์ด๋ http ํต์ ์ ๋์์ฃผ๋ ๊ณ ๋ง์ด ๋ ์^^)๋ฅผ ์ฌ์ฉํ์ฌ Repository ํ์ผ ์์์ ์ค์ server ํต์ ์ ํธ์ถํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์๋ต๋ฐ๋ ๋ก์ง์ ์์ฑํ๋ฉด ๋ฉ๋๋ค.
server๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์๋ต๋ฐ์ ํ ์ด ๋ฐ์ดํฐ๋ฅผ ๋ค์ Repository์ ํ ๋จ๊ณ ์ ๊ตฌ์ฑ์์์ธ ViewModel์๊ฒ ์ ๋ฌํฉ๋๋ค.
(ํ์๋ Repository ์์์ ์๋ฒ ํธ์ถ ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ ์ํด coroutine ์ด๋ผ๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.)
Repository์๊ฒ ์ฌ์ฉ์ ํ๋กํ์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ViewModel์ ์์ ์ ํธ์ถํ UI ๋จ์ ๋ฐ์ดํฐ๋ฅผ ๋๊ฒจ์ค๋๋ค.
(์ด ๋, LiveData ๋ผ๋ Observableํ ๋ฐ์ดํฐ Holder ํด๋์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค. LiveData์ ๋ํ ์์ธํ ์ค๋ช
์ ๋ค๋ฅธ ํฌ์คํ
์ ํตํด ์๊ฐํ๊ฒ ์ต๋๋คใ
ใ
ใ
)
ViewModel์๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋๊ฒจ ๋ฐ๋ UI ๊ตฌ์ฑ์์๋ ํ์ํ ์์น์ ๋ฐ์ดํฐ๋ฅผ ์ธํ ํจ์ผ๋ก์จ ์ฌ์ฉ์ ํ๋กํ UI๋ฅผ ์์ฑํ๊ฒ ๋ฉ๋๋ค.
์์์ ์ค๋ช ํ ์ฌ์ฉ์ ํ๋กํ ๊ธฐ๋ฅ์ด ๊ตฌํ๋๋ ๊ณผ์ ์ ๋ค์ ์ ๋ฆฌํด๋ณด๋ฉด UI ๊ตฌ์ฑ์์ --> ViewModel --> Repository --> ViewModel --> UI ๊ตฌ์ฑ์์ ๋ก ์ด์ด์ง๋ ํ๋ฆ์์ ์ ์ ์์ ๊ฒ์ ๋๋ค.
์ด๋ฌํ ๊ตฌ์กฐ๋ก ์๋๋ก์ด๋ ์ฑ์ ๋น๋ํ๋ ๊ฒ์ ๊ถ์ฅํ๊ณ ์์ผ๋ฉฐ ์ฑ์ด ์ด๋ฌํ ๊ตฌ์กฐ์ผ ๋ ์ฌ๋ฌ ์ฌ์ฉ์ ํ๊ฒฝ์ ํ๋ฆ์ ์ ์ ํ ๋์ํ ์ ์์ ๊ฒ์ ๋๋ค~!
๊ทธ๋ผ ์ฌ๊ธฐ๊น์ง์ ์ค๋ช ์ผ๋ก ์๋๋ก์ด๋ ๊ถ์ฅ ์ํคํ ์ฒ์ ๋ํ ์๊ฐ๋ฅผ ๋ง์น๊ฒ ์ต๋๋ค~
์ ๊ธ์ ์ฝ์ผ๋ฉฐ ์๋๋ก์ด๋ ๊ถ์ฅ ์ํคํ ์ฒ์ ๋ํ ์ ๋ฐ์ ์ธ ์ดํด์ ๋์์ด ๋์๋ค๋ฉด ํ์๋ ์ ๋ง ๊ธฐ์ ๊ฒ ๊ฐ์ต๋๋ค๐
๋ํ ์ ๋ด์ฉ ์ค ์๋ชป๋ ์ค๋ช ์ด๋ ๋ถ์กฑํ ์ค๋ช ์ด ์์ ๊ฒฝ์ฐ ์ฆ์ ํผ๋๋ฐฑ ํด์ฃผ์๊ธธ ๊ธฐ๋ํฉ๋๋ค><
์๋๋ก์ด๋ ๊ถ์ฅ ์ํคํ ์ฒ์ ๋ํ ๋์ฑ ์์ธํ ๋ด์ฉ์ ์ฑ ์ํคํ ์ฒ ๊ฐ์ด๋ ๋ฌธ์๋ฅผ ํตํด ํ์ธํ ์ ์์ต๋๋ค.
๊น์ดํฌ - ๐จโ๐ฉโ๐งโ๐งAUSG (AWS University Student Group) 3๊ธฐ๋ก ํ๋ ์ค
chchgml10@gmail.com
๊ธ ์ ์ฝ์์ต๋๋ค!
๋ทฐ๋ชจ๋ธ์ด UI๋ก ๋์ ธ์ฃผ๊ธฐ๋ ํ์ง๋ง ๋ผ์ด๋ธ๋ฐ์ดํฐ๋ฅผ ์จ์ View๋ก๋ถํฐ ๋ ๋ฆฝ์ ์ธ? ๊ฑฐ๋ค์
๋ ๋ฆฝ์ ์ด๋ค๋ณด๋ ๋ค๋ฅธ View์์ ์ฝ๊ฒ ์ฌ์ฉ๊ฐ๋ฅํ ๊ฑฐ๊ฐ๊ณ ์ข์๋ณด์ด๋ค์