๐Ÿ˜‡ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ถŒ์žฅ ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•ด์„œ (MVVM ํŒจํ„ด๊ณผ ๋น„์Šท!)

AUSGยท2020๋…„ 7์›” 7์ผ
13

ํ•„์ž๋Š” ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ ๋ฐ ๊ด€๋ จ ๊ณต๋ถ€๋ฅผ ์•ฝ 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๊ธฐ๋กœ ํ™œ๋™ ์ค‘

๊ด€์‹ฌ์‚ฌ

  • Android Platform
  • Mobile Service ๊ฐœ๋ฐœ ๋ฐ ๋ฐฐํฌ
  • Kotlin
  • Team Activity
  • Scrum

๋ธ”๋กœ๊ทธ

https://choheeis.github.io/

Email

chchgml10@gmail.com

github

https://github.com/choheeis

profile
AWSKRUG University Student Group์˜ ๊ณต์‹ ๋ฒจ๋กœ๊ทธ ๊ณ„์ •์ž…๋‹ˆ๋‹ค. ๋ฉค๋ฒ„๋“ค์ด ๋Œ์•„๊ฐ€๋ฉฐ ๊ธ€์„ ์“ฐ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

1๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2021๋…„ 1์›” 29์ผ

๊ธ€ ์ž˜ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค!
๋ทฐ๋ชจ๋ธ์ด UI๋กœ ๋˜์ ธ์ฃผ๊ธฐ๋Š” ํ•˜์ง€๋งŒ ๋ผ์ด๋ธŒ๋ฐ์ดํ„ฐ๋ฅผ ์จ์„œ View๋กœ๋ถ€ํ„ฐ ๋…๋ฆฝ์ ์ธ? ๊ฑฐ๋„ค์š”
๋…๋ฆฝ์ ์ด๋‹ค๋ณด๋‹ˆ ๋‹ค๋ฅธ View์—์„œ ์‰ฝ๊ฒŒ ์‚ฌ์šฉ๊ฐ€๋Šฅํ• ๊ฑฐ๊ฐ™๊ณ  ์ข‹์•„๋ณด์ด๋„ค์š”

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ