ViewModel & LiveData

2021. 9. 20. 01:42

*๊ณต์‹๋ฌธ์„œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•™์Šตํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•œ ํฌ์ŠคํŒ…์ž…๋‹ˆ๋‹ค.*

 

ViewModel ๊ฐœ์š”  |  Android ๊ฐœ๋ฐœ์ž  |  Android Developers

ViewModel์„ ์‚ฌ์šฉํ•˜๋ฉด ์ˆ˜๋ช… ์ฃผ๊ธฐ๋ฅผ ์ธ์‹ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ UI ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

developer.android.com

 

LiveData ๊ฐœ์š”  |  Android ๊ฐœ๋ฐœ์ž  |  Android Developers

LiveData๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜๋ช… ์ฃผ๊ธฐ๋ฅผ ์ธ์‹ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

developer.android.com

 

 

Activity ๋˜๋Š” Fragment๋ฅผ UI ์ปจํŠธ๋กค๋Ÿฌ๋ผ๊ณ  ํ•œ๋‹ค.

UI ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ชฉ์ ์€ UI ๋ฐ์ดํ„ฐ ํ‘œ์‹œ, ์‚ฌ์šฉ์ž ์ž‘์—…์— ๋ฐ˜์‘, ๊ถŒํ•œ ์š”์ฒญ ๋“ฑ์ด ์žˆ๋‹ค.

 

์‹œ์Šคํ…œ์—์„œ UI ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ๋‹ค์‹œ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ ์ €์žฅ๋œ ๋ชจ๋“  UI ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋Š” ์‚ญ์ œ๋œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด์žˆ๋˜ Activity๊ฐ€ ๊ตฌ์„ฑ์ด ๋ณ€๊ฒฝ๋˜์–ด ๋‹ค์‹œ ์ƒ์„ฑ๋œ๋‹ค๋ฉด ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๋‹ค์‹œ ๊ฐ€์ ธ์™€์•ผํ•œ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— UI ์ปจํŠธ๋กค๋Ÿฌ์™€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํ›จ์”ฌ ํšจ์œจ์ ์ด๋‹ค.

 

UI ์ปจํŠธ๋กค๋Ÿฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ฉด ๋น„ํšจ์œจ์ ์ธ ์ด์œ 

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

 

๋”ฐ๋ผ์„œ UI ์ปจํŠธ๋กค๋Ÿฌ์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ์‹œ๋งŒ ํ•˜๊ณ  ๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด ๊ฐ€์žฅ ์ ํ•ฉํ•˜๋‹ค.

์ด๋•Œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํด๋ž˜์Šค์˜ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๊ฐ€ ViewModel์ด๋‹ค.

 

 

ViewModel

ViewModel์€ UI ์ปจํŠธ๋กค๋Ÿฌ์— ํ‘œ์‹œํ•  ๋ฐ์ดํ„ฐ๋ฅผ ์ค€๋น„ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์˜ ํด๋ž˜์Šค์ด๋‹ค.

ViewModel์˜ ์œ ์ผํ•œ ๋ชฉ์ ์€ UI ์ปจํŠธ๋กค๋Ÿฌ์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ํš๋“ํ•˜๊ณ  ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

ViewModel์˜ ์ƒ๋ช…์ฃผ๊ธฐ

ViewModel์€ Activity๊ฐ€ ๋๋‚  ๋–„๊นŒ์ง€, Fragment๊ฐ€ ๋ถ„๋ฆฌ๋  ๋•Œ๊นŒ์ง€ ๋ฉ”๋ชจ๋ฆฌ์— ๋‚จ์•„์žˆ๋Š”๋‹ค.

์œ„ ๊ทธ๋ฆผ์€ ํ™”๋ฉด์„ ํšŒ์ „ํ–ˆ์„ ๋•Œ์˜ Activity ์ƒ๋ช…์ฃผ๊ธฐ์™€ ViewModel์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

Activity์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋Š” ํ™”๋ฉด์„ ํšŒ์ „ํ–ˆ์„ ๋•Œ ๋‹ค์‹œ ์‹œ์ž‘ํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ViewModel์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋Š” onCreate()๋ฅผ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ ์ƒ์„ฑ๋˜๊ณ 

Acitivty๊ฐ€ ์ค‘๊ฐ„์— ์–ด๋–ค ํ™œ๋™์„ ํ•˜๋“  ์ƒ๊ด€์—†์ด Acitivty์˜ ๋ชจ๋“  ํ™œ๋™์ด ๋๋‚˜๊ณ  ํ๊ธฐ๋  ๋•Œ๊นŒ์ง€ ๋‚จ์•„์žˆ๋Š”๋‹ค.

์ฆ‰, Activity๊ฐ€ onDestroy()๋˜๋”๋ผ๋„ ViewModel์€ destroyed ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

ViewModel์˜ ํŠน์ง•

  • UI ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋๋‚˜๊ณ  ํ๊ธฐ๋  ๋•Œ๊นŒ์ง€ ๋ฉ”๋ชจ๋ฆฌ์— ๋‚จ์•„์žˆ๋Š”๋‹ค.
  • ViewModel์€ ์ˆ˜๋ช…์ฃผ๊ธฐ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๊ด€์ฐฐํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค.
  • UI ์ปจํŠธ๋กค๋Ÿฌ๋Š” ViewModel์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ด€์ฐฐํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•œ๋‹ค.
  • ViewModel์€ ์ผ๋ฐ˜์ ์œผ๋กœ LiveData ๋˜๋Š” DataBinding์„ ํ†ตํ•ด ์ •๋ณด๋ฅผ ๋…ธ์ถœํ•œ๋‹ค.

 

ViewModel์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉด

UI ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ ๋„ ๋ฐ์ดํ„ฐ ๋ณ€ํ™”๋ฅผ ๊ด€์ฐฐํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ŠคํŠธ์— ์šฉ์ดํ•˜๋‹ค.

 

 

LiveData

LiveData๋Š” ๊ด€์ฐฐ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ ํ™€๋” ํด๋ž˜์Šค์ด๋‹ค.

์ผ๋ฐ˜ ํด๋ž˜์Šค์™€๋Š” ๋‹ฌ๋ฆฌ ์ˆ˜๋ช… ์ฃผ๊ธฐ๋ฅผ ์ธ์‹ํ•˜์—ฌ ํ™œ์„ฑ ์ƒํƒœ์— ์žˆ๋Š” ๊ตฌ์„ฑ์š”์†Œ Observer๋งŒ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.

์ฆ‰, Observer ํด๋ž˜์Šค๋กœ ํ‘œํ˜„๋˜๋Š” ๊ด€์ฐฐ์ž์˜ ์ˆ˜๋ช…์ฃผ๊ธฐ๊ฐ€

started ๋˜๋Š” resumed ์ƒํƒœ์ด๋ฉด ํ™œ์„ฑ ์ƒํƒœ๋กœ ๊ฐ„์ฃผํ•˜์—ฌ ์—…๋ฐ์ดํŠธ ์ •๋ณด๋ฅผ ์•Œ๋ฆฌ๊ณ 

destroyed๋กœ ๋ณ€๊ฒฝ๋  ๋•Œ ๊ด€์ฐฐ์ž๋ฅผ ์‚ญ์ œํ•œ๋‹ค.

 

UI ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋ฐ์ดํ„ฐ ์ƒํƒœ ๋ณด์œ ๊ฐ€ ์•„๋‹Œ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ์—ญํ• ์ด๋ฏ€๋กœ LiveData๋ฅผ ๋ณด์œ ํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค.

 

UI ์ปจํŠธ๋กค๋Ÿฌ๋Š” LiveData ๊ฐ์ฒด๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๊ด€์ฐฐํ•  ์ˆ˜ ์žˆ๊ณ  

์ˆ˜๋ช…์ฃผ๊ธฐ๊ฐ€ ๋๋‚˜๋Š” ์ฆ‰์‹œ ์ˆ˜์‹  ๊ฑฐ๋ถ€๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๊ฑฑ์ •ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

 

LIveData์˜ ์ด์ 

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

 

ViewModel์€ UI ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ํŒŒ๊ดด๋  ๋•Œ๊นŒ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•˜๊ณ 
๋ฐ์ดํ„ฐ๋Š” LiveData๋กœ ํ‘œํ˜„๋˜์–ด ์ƒ๋ช…์ฃผ๊ธฐ์— ๋”ฐ๋ผ UI ์ปจํŠธ๋กค๋Ÿฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ๋•Œ๋ฌธ์—
๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ์—†์ด ์ตœ์‹  ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•˜๋Š” ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.


ViewModel & LiveData ์‚ฌ์šฉํ•˜๊ธฐ

ViewModel, LiveData ๊ฐ์ฒด ๋งŒ๋“ค๊ธฐ

1. ViewModel ํด๋ž˜์Šค ๋‚ด์—์„œ LiveData ์ธ์Šคํ„ด์Šค ์ƒ์„ฑํ•œ๋‹ค.

 

class NameViewModel : ViewModel() {

	// 1. ViewModel ํด๋ž˜์Šค ๋‚ด์—์„œ LiveData ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
	val name : MutableLiveData<String> by lazy {
		MutableLiveData<String>
	}
	
}

 

LiveData ๊ฐ์ฒด ๊ด€์ฐฐํ•˜๊ธฐ

1. Observer ๊ฐ์ฒด ์ƒ์„ฑ ํ›„ onChanged() ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•œ๋‹ค.

onChanged() ๋ฉ”์†Œ๋“œ๋Š” LiveData๊ฐ€ ๋ณด์œ ํ•œ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ์ž‘์—…์„ ์ œ์–ดํ•œ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ UI ์ปจํŠธ๋กค๋Ÿฌ์— Observer ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

 

2. observe() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ LiveData์™€ Observer ๊ฐ์ฒด๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค.

observer() ๋ฉ”์†Œ๋“œ๋Š” LifechcleOwner ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—

Observer ๊ฐ์ฒด๊ฐ€ LiveData ๊ฐ์ฒด์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ๊ด€ํ•œ ์•Œ๋ฆผ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. 

์ผ๋ฐ˜์ ์œผ๋กœ UI ์ปจํŠธ๋กค๋Ÿฌ์— Observer ๊ฐ์ฒด๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค.

 

class NameActivity : AppCompatActivity() {
	
	private val model : NameViewModel by viewModels()

	override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
				
		// 1. Observer ๊ฐ์ฒด ์ƒ์„ฑ
        val observer = Observer<String> { newName ->
            // 1. onChanged() ๋ฉ”์†Œ๋“œ ์ •์˜
            nameTextView.text = newName
        }

        // 2. observer ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉํ•˜์—ฌ LiveData์™€ Observer ์—ฐ๊ฒฐ
        model.name.observe(this, observer)
    }
}

 

* onCreate() ๋ฉ”์„œ๋“œ๋Š” LiveData ๊ฐ์ฒด ๊ด€์ฐฐ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ ํ•ฉํ•œ ์žฅ์†Œ์ด๋‹ค.

  • ์‹œ์Šคํ…œ์ด UI ์ปจํŠธ๋กค๋Ÿฌ์˜ onResume() ๋ฉ”์†Œ๋“œ์— ์ค‘๋ณต ํ˜ธ์ถœ์„ ํ•˜์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • UI ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ํ™œ์„ฑ ์ƒํƒœ ๋˜๋Š” ์ฆ‰์‹œ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

 

LiveData ๊ฐ์ฒด ์—…๋ฐ์ดํŠธํ•˜๊ธฐ

LiveData์—๋Š” ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐ ๊ณต๊ฐœ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์—†๋‹ค.

MutableLiveData ํด๋ž˜์Šค ์‚ฌ์šฉ ์‹œ ์“ธ ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ setValue(T), postValue(T)์˜ T ๊ฐ’๊ณผ ํ•จ๊ป˜ onChanged() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

 

model.name.setValue("change")

 

ViewModel์„ ์‚ฌ์šฉํ•˜์—ฌ Fragment ๊ฐ„ ๋ฐ์ดํ„ฐ ๊ณต์œ ํ•˜๊ธฐ

Fragment1์€ select ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด seleted๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ 

Fragment2๋Š” selected๋ฅผ ํ†ตํ•ด ๊ฐ’์„ ์ „๋‹ฌ๋ฐ›๋Š”๋‹ค.

class SharedViewModel : ViewModel() {
    val selected = MutableLiveData<Item>()

    fun select(item: Item) {
        selected.value = item
    }
}

 

Room์—์„œ LiveData ์‚ฌ์šฉํ•˜๊ธฐ

Room์€ ๊ด€์ฐฐ ๊ฐ€๋Šฅํ•œ ์ฟผ๋ฆฌ๋ฅผ ์ง€์›ํ•˜๋ฉด LiveData ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๊ด€์ฐฐ ๊ฐ€๋Šฅํ•œ ์ฟผ๋ฆฌ๋Š” DAO(Database Access Object)์˜ ์ผ๋ถ€๋กœ ์ž‘์„ฑํ•œ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์—…๋ฐ์ดํŠธ๋  ๋•Œ Room์—์„œ๋Š” LiveData ๊ฐ์ฒด๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ์—์„œ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

UI์— ํ‘œ์‹œ๋œ ๋ฐ์ดํ„ฐ์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ๊ฐ„์˜ ๋™๊ธฐํ™”๋ฅผ ์œ ์ง€ํ•˜๋Š”๋ฐ ์œ ์šฉํ•˜๋‹ค.

 

Room์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค๋ฅธ ํฌ์ŠคํŒ…์—์„œ ์ž์„ธํžˆ ๋‹ค๋ฃจ๋„๋ก ํ•˜๊ฒ ๋‹ค.

 

 

728x90

BELATED ARTICLES

more