MVVM - mandol96/Navi GitHub Wiki

Repository

  • UI์™€ ์ง์ ‘์ ์œผ๋กœ ๊ด€๊ณ„์—†๋Š” ๋ฐ์ดํ„ฐ ๊ด€๋ จ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์ฝ”๋“œ์˜ ๋ณต์žก์„ฑ์„ ์ค„์ž…๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ์ถ”์ƒํ™”ํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ์ถœ์ฒ˜๋ฅผ ๋ชฐ๋ผ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ๋งž๋Š” ํ˜•ํƒœ๋กœ ๊ฐ€๊ณตํ•ด์ค๋‹ˆ๋‹ค.

MVVM ํŒจํ„ด View

  • UI๊ทธ๋ฆฌ๊ธฐ, ์‚ฌ์šฉ์ž action ์•Œ๋ฆฌ๊ธฐ ViewModel
  • View์— ๋‚˜ํƒ€๋‚ผ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ, ์ž…๋ ฅ ์ด๋ฒคํŠธ ์ƒํƒœ ๊ด€๋ฆฌ, UI๋ฅผ ๊ทธ๋ฆฌ๋Š”๋ฐ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์š”์ฒญ Model
  • ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ, ์•ฑ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง Data ๊ณ„์ธต์ด model์— ์—ญํ• ์„ ํ•œ๋‹ค

"NaviApp UI ํ๋ฆ„ ํ™ˆ (์ง€๋„) -> ์ง€๋„ ์ถ”๊ฐ€ํ•˜๊ธฐ -> ์œ„์น˜ ์„ ํƒ ->๊ฒŒ์‹œ๊ธ€ -> ๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก -> ๊ณต์œ  -

์ง€๋„ ํ™”๋ฉด์—์„œ๋Š” Kako API๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ง€๋„๋ฅผ ๋„์›Œ์ค๋‹ˆ๋‹ค. ํ”Œ๋กœํŒ… ๋ฒ„ํŠผ(FAB)์„ ํด๋ฆญ ์‹œ ์žฅ์†Œ ๋“ฑ๋ก์œผ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์žฅ์†Œ ๋“ฑ๋ก์—์„œ๋Š” ๋“œ๋ž๋‹ค์šด๋ฉ”๋‰ด์™€ ํ…์ŠคํŠธํ•„๋“œ๊ฐ€ ๋‹ค ์ž…๋ ฅ์ด ๋˜๋ฉด ๋ฒ„ํŠผ์ด ํ™œ์„ฑํ™” ๋˜๊ณ , ์™„๋ฃŒ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ํ† ์ŠคํŠธ ๋ฉ”์‹œ์ง€๋กœ ์„ฑ๊ณต ์‹คํŒจ ์œ /๋ฌด๋ฅผ ์•Œ๋ ค์ค๋‹ˆ๋‹ค. ์œ„์น˜ ์ฐพ๊ธฐ๋ฅผ ๋ˆ„๋ฅด๋ฉด ์ž์‹ ์˜ ํ˜„์žฌ ์œ„์น˜๋กœ ์ด๋™ํ•˜์—ฌ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. NaviService์—์„œ ์นด์นด์˜ค Rest API๋ฅผ ์ด์šฉํ•˜์—ฌ json ๋ฐ์ดํ„ฐ๋ฅผ ์ง๋ ฌํ™”/์—ญ์ง๋ ฌํ™” ์—ญํ• ์„ ํ•˜์—ฌ ์ฃผ์†Œ <-> ์ขŒํ‘œ๋ฅผ ๊ตฌํ•ด์ค๋‹ˆ๋‹ค. ๊ฒŒ์‹œ๊ธ€ ํ™”๋ฉด์—์„œ๋Š” ๋ฆฌ์‚ฌ์ดํด๋Ÿฌ๋ทฐ๋กœ ๋ฆฌ์ŠคํŠธ ํ˜•์‹์œผ๋กœ ๊ฒŒ์‹œ๊ธ€๋“ค์„ ๋‚˜ํƒ€๋‚ด์ฃผ๊ณ  ํ”Œ๋กœํŒ… ๋ฒ„ํŠผ(FAB)์„ ํด๋ฆญ ์‹œ ์žฅ์†Œ ๋“ฑ๋ก์œผ๋กœ ์ด๋™ํ•˜๋ฉด ์žฅ์†Œ ๋“ฑ๋ก๊ณผ ๊ฐ™์ด ๋ชจ๋“  ๊ฐ’์ด ์ž…๋ ฅ๋˜์–ด์•ผ ๋ฒ„ํŠผ์ด ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ํ™”๋ฉด์€ MVVM ํŒจํ„ด์„ ์ ์šฉํ•˜์—ฌ Data๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ฝ”๋“œ๋Š” Repository์—์„œ ํ•ด์ฃผ๊ณ  ViewModel์—์„œ๋Š” StateFlow๋กœ UI์— ์ƒํƒœ์— ๋”ฐ๋ผ ๋ณด์—ฌ์ฃผ๋Š” Repository์— ์ฝ”๋“œ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ์„ฑ๊ณต/์‹คํŒจ/๋กœ๋”ฉ์— ๋Œ€ํ•œ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด์ค๋‹ˆ๋‹ค.