{"id":44167,"date":"2020-06-01T12:57:23","date_gmt":"2020-06-01T03:57:23","guid":{"rendered":"https:\/\/www.charlezz.com\/?p=44167"},"modified":"2020-06-03T10:58:53","modified_gmt":"2020-06-03T01:58:53","slug":"viewmodel%ec%9d%b4%eb%9e%80-%eb%ac%b4%ec%97%87%ec%9d%b8%ea%b0%80-viewmodel-%ec%b4%88%eb%b3%b4%eb%a5%bc-%ec%9c%84%ed%95%9c-%ea%b0%80%ec%9d%b4%eb%93%9c","status":"publish","type":"post","link":"https:\/\/charlezz.com\/?p=44167","title":{"rendered":"ViewModel\uc774\ub780 \ubb34\uc5c7\uc778\uac00? ViewModel \ucd08\ubcf4\ub97c \uc704\ud55c \uac00\uc774\ub4dc"},"content":{"rendered":"<h2>ViewModel\uc774\ub780?<\/h2>\n<p>ViewModel\uc774\ub780 Android Jepack\uc758 \uad6c\uc131\uc694\uc18c \uc911 \ud558\ub098\ub85c, \ubcf8\ub798 ViewModel\uc774\ub780 \uc774\ub984\uc740 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uac1c\ubc1c \ub514\uc790\uc778 \ud328\ud134\uc911 \ud558\ub098\uc778 MVVM(Model &#8211; View &#8211; ViewModel) \ub514\uc790\uc778 \ud328\ud134\uc73c\ub85c\ubd80\ud130 \ud30c\uc0dd\ub418\uc5c8\ub2e4.<\/p>\n<p>MVVM\uc758 \uad00\uc810\uc5d0\uc11c \ubd80\ub974\ub294 ViewModel\uacfc Android Jetpack\uc5d0 \ud3ec\ud568\ub41c ViewModel \ud074\ub798\uc2a4\ub97c \uad6c\ubd84\ud558\uae30 \uc704\ud574 \ud754\ud788 Android Jetpack\uc5d0 \ud3ec\ud568\ub41c ViewModel\uc744 Android Architecture ViewModel\uc758 \uc57d\uc790\uc778 AAC ViewModel\uc774\ub77c\uace0 \ubd80\ub974\uae30\ub3c4 \ud55c\ub2e4.<\/p>\n<h2>ViewModel\uc740 \uc65c \ud544\uc694\ud558\uc9c0?<\/h2>\n<p>MVVM\uc758 \uad00\uc810\uc5d0\uc11c \ubd24\uc744 \ub54c ViewModel\uc740 View\ub85c\ubd80\ud130 \ub3c5\ub9bd\uc801\uc774\uba70, View\uac00 \ud544\uc694\ub85c \ud558\ub294 \ub370\uc774\ud130\ub9cc\uc744 \uc18c\uc720\ud55c\ub2e4. \uc548\ub4dc\ub85c\uc774\ub4dc \uc571 \uac1c\ubc1c\uc2dc\uc5d0\ub3c4 MVVM \ub514\uc790\uc778 \ud328\ud134\uc744 \uc801\uc6a9\ud558\uba74 Activity\ub098 Fragment \uac19\uc740 UI\ucee8\ud2b8\ub864\ub7ec\uc758 \uacfc\ub3c4\ud55c \ucc45\uc784\uc744 \ubd84\ub2f4\ud558\uc5ec \ud074\ub798\uc2a4\uac00 \uac70\ub300\ud574\uc9c0\ub294 \uac83\uc744 \ubc29\uc9c0\ud558\uace0, \uc720\uc9c0\ubcf4\uc218, \uc7ac\uc0ac\uc6a9\uc131 \uadf8\ub9ac\uace0 \ud14c\uc2a4\ud2b8 \ub4f1\uc744 \uc6a9\uc774\ud558\uac8c \ub9cc\ub4e4\uc5b4 \uc900\ub2e4.<\/p>\n<p>\uad6c\uae00\uc5d0\uc11c\ub3c4 \uc571 \uac1c\ubc1c\uc790\ub4e4\uc5d0\uac8c MVVM\ud328\ud134\uc744 \uc0ac\uc6a9\uc744 \uad8c\uc7a5\ud558\uace0 \uc788\uc73c\uba70, MVVM\uad00\uc810\uc758 ViewModel\uc744 \uad6c\ud604\ud560 \ub54c AAC ViewModel\uc744 \uc0ac\uc6a9\ud558\uba74 \uc88b\ub2e4.<\/p>\n<h2>ViewModel\uc758 \ud2b9\uc9d5<\/h2>\n<p>ViewModel\uc740 Activity\uc5d0\uc11c\ub294 Activity\uac00 \uc644\uc804\ud788 \uc885\ub8cc\ub420 \ub54c\uae4c\uc9c0, \uadf8\ub9ac\uace0 Fragment\uc5d0\uc11c\ub294 Fragment\uac00 \ubd84\ub9ac\ub420 \ub54c\uae4c\uc9c0 \uba54\ubaa8\ub9ac\uc5d0 \ub0a8\uc544\uc788\ub3c4\ub85d \uc124\uacc4 \ub418\uc5b4\uc788\ub2e4. \uc774\ub97c \uc880 \ub354 \uc790\uc138\ud788 \uc54c\uae30 \uc704\ud574\uc11c <a href=\"https:\/\/developer.android.com\/guide\/components\/activities\/activity-lifecycle?hl=ko\">Activity \uc0dd\uba85 \uc8fc\uae30\uc5d0 \ub300\ud55c \uc774\ud574<\/a>\uac00 \ud544\uc694\ud558\ub2e4.\u00a0<\/p>\n<div id=\"attachment_44168\" style=\"width: 532px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/05\/viewmodel-lifecycle.png\"><img aria-describedby=\"caption-attachment-44168\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/05\/viewmodel-lifecycle.png\" alt=\"\" width=\"522\" height=\"543\" class=\"wp-image-44168 size-full\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/05\/viewmodel-lifecycle.png 522w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/05\/viewmodel-lifecycle-288x300.png 288w\" sizes=\"(max-width: 522px) 100vw, 522px\" \/><\/a><\/p>\n<p id=\"caption-attachment-44168\" class=\"wp-caption-text\">Activity\uc640 ViewModel\uc758 \uc0dd\uba85\uc8fc\uae30 \ube44\uad50<\/p>\n<\/div>\n<p>\uc704\uc758 \uadf8\ub9bc\uc744 \ubcf4\uba74 Activity\uc758 \uc0dd\uba85\uc8fc\uae30\uc640 ViewModel\uc758 \uc0dd\uba85\uc8fc\uae30\ub97c \ud568\uaed8 \ud655\uc778\ud560 \uc218 \uc788\ub2e4. \uc561\ud2f0\ube44\ud2f0\uac00 \ucd5c\ucd08 \uc0dd\uc131\ub420 \ub54c \uc77c\ubc18\uc801\uc73c\ub85c ViewModel\uc744 \uc778\uc2a4\ud134\uc2a4\ud654 \ud558\uc5ec \uc0dd\uba85\uc8fc\uae30\ub97c \ud568\uaed8 \uc2dc\uc791\ud55c\ub2e4. (ViewModel\uc758 \uc0dd\uba85\uc8fc\uae30\ub97c Fragment\uc758 \uc0dd\uba85\uc8fc\uae30\uc640 \ud568\uaed8\ud558\ub3c4\ub85d \ub9cc\ub4e4 \uc218\ub3c4 \uc788\ub2e4.)<\/p>\n<p>Configuration \ubcc0\uacbd\uc774 (\uc608:\ud654\uba74 \ud68c\uc804) \ubc1c\uc0dd\ud560 \ub54c \uc561\ud2f0\ube44\ud2f0\uac00 \ub2e4\uc2dc \uc2dc\uc791 \ub418\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\ub2e4. \ud558\uc9c0\ub9cc ViewModel\uc740 \uc5ec\uc804\ud788 \uba54\ubaa8\ub9ac \uc0c1\uc5d0 \ub0a8\uc544\uc788\ub294\ub2e4. \uc774\ub294 Activity \ub0b4\ubd80\uc5d0\uc11c Configuration \ubcc0\uacbd\uacfc \ubb34\uad00\ud558\uac8c \uc720\uc9c0 \ub418\ub294 NonConfigurationInstances \uac1d\uccb4\ub97c \ub530\ub85c \uad00\ub9ac\ud558\uae30 \ub54c\ubb38\uc774\ub2e4.<\/p>\n<p>Activity\uc758 finish() \ud638\ucd9c\ub4f1\uc5d0 \uc758\ud574 \uc561\ud2f0\ube44\ud2f0\uac00 \uc0dd\uba85\uc8fc\uae30\uac00 \uc885\ub8cc\ub428\uc5d0 \ub530\ub77c \ub0b4\ubd80\uc758 LifecycleEventObserver\ub97c \ud1b5\ud574 ViewModel\ub3c4 onCleared() \ucf5c\ubc31 \uba54\uc11c\ub4dc\ub97c \ud638\ucd9c\ud558\uace0 \uc885\ub8cc\ub41c\ub2e4.<\/p>\n<h2>ViewModel \uc694\uccad \ud504\ub85c\uc138\uc2a4<\/h2>\n<p><a href=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/05\/ViewModel.png\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/05\/ViewModel-1024x642.png\" alt=\"\" width=\"750\" height=\"470\" class=\"aligncenter size-large wp-image-44171\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/05\/ViewModel-1024x642.png 1024w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/05\/ViewModel-300x188.png 300w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/05\/ViewModel-768x481.png 768w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/05\/ViewModel.png 1302w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<ol>\n<li>ViewModelProvider\ub97c \ud1b5\ud574 ViewModel \uc778\uc2a4\ud134\uc2a4\ub97c \uc694\uccad\ud55c\ub2e4.<\/li>\n<li>ViewModelProvider \ub0b4\ubd80\uc5d0\uc11c\ub294 ViewModelStoreOwner\ub97c \ucc38\uc870\ud558\uc5ec ViewModelStore\ub97c \uac00\uc838\uc628\ub2e4.<\/li>\n<li>ViewModelStore\uc5d0\uac8c \uc774\ubbf8 \uc0dd\uc131\ub41c(\uc800\uc7a5\ub41c) ViewModel \uc778\uc2a4\ud134\uc2a4\ub97c \uc694\uccad\ud55c\ub2e4.<\/li>\n<li>\ub9cc\uc57d ViewModelStore\uac00 \uc801\ud569\ud55c ViewModel \uc778\uc2a4\ud134\uc2a4\ub97c \uac00\uc9c0\uace0 \uc788\uc9c0 \uc54a\ub2e4\uba74, <br \/>\nFactory\ub97c \ud1b5\ud574 ViewModel\uc778\uc2a4\ud134\uc2a4\ub97c \uc0dd\uc131\ud55c\ub2e4.<\/li>\n<li>\uc0dd\uc131\ud55c ViewModel \uc778\uc2a4\ud134\uc2a4\ub97c ViewModeStore\uc5d0 \uc800\uc7a5\ud558\uace0 \ub9cc\ub4e4\uc5b4\uc9c4 ViewModel \uc778\uc2a4\ud134\uc2a4\ub97c \ud074\ub77c\uc774\uc5b8\ud2b8\uc5d0\uac8c \ubc18\ud658\ud55c\ub2e4.<\/li>\n<li>\ub611\uac19\uc740 ViewModel\u00a0 \uc778\uc2a4\ud134\uc2a4 \uc694\uccad\uc774 \ub4e4\uc5b4\uc628\ub2e4\uba74, 1~3\ubc88\uc758 \uacfc\uc815\uc744 \ubc18\ubcf5\ud558\uac8c \ub41c\ub2e4.<\/li>\n<\/ol>\n<h2>ViewModel\uc758 \uad6c\ud604<\/h2>\n<p>\uac00\uc7a5 \uba3c\uc800 \ud574\uc57c \ud560 \uc77c\uc740 ViewModel \ud074\ub798\uc2a4\ub97c \uc0c1\uc18d\ud558\ub294 \uc11c\ube0c \ud074\ub798\uc2a4\ub97c \uc815\uc758\ud55c\ub2e4.<\/p>\n<pre class=\"lang: decode:true\">class MainViewModel : ViewModel() {\r\n    ...\r\n}<\/pre>\n<p>\uadf8 \ud6c4\uc5d0 \ub2e4\uc74c\uacfc \uac19\uc774 ViewModel \uc778\uc2a4\ud134\uc2a4\uc5d0 \uc811\uadfc\ud560 \uc218 \uc788\ub2e4.<\/p>\n<pre class=\"lang: decode:true\">class MainActivity : AppCompatActivity() {\r\n\r\n    private lateinit var viewModel:MainViewModel\r\n\r\n    override fun onCreate(savedInstanceState: Bundle?) {\r\n        super.onCreate(savedInstanceState)\r\n        \/\/ViewModel \uc778\uc2a4\ud134\uc2a4 \uc0dd\uc131\r\n        viewModel = ViewModelProvider(this, ViewModelProvider.NewInstanceFactory()).get(MainViewModel::class.java)\r\n    }\r\n\r\n}<\/pre>\n<p>ViewModel\uc744 \uc0dd\uc131\ud558\uae30 \uc704\ud574\uc11c\ub294 ViewModel Provider \uac1d\uccb4\uac00 \ud544\uc694\ud558\ub2e4. \uc77c\ubc18\uc801\uc73c\ub85c\u00a0 ViewModelProvider\uc758 \uc0dd\uc131\ud558\uae30 \uc704\ud574 \uc0dd\uc131\uc790 \ub9e4\uac1c\ubcc0\uc218\ub85c ViewModelStoreOwner\uc640 ViewModelProvider.Factory\uac00 \ud544\uc694\ud558\ub2e4.<\/p>\n<p>ComponentActivity\uac00 ViewModelStoreOwner \uc778\ud130\ud398\uc774\uc2a4\ub97c \uad6c\ud604\ud558\uace0 \uc788\uc73c\ubbc0\ub85c, ComponentActivity\uc758 \uc11c\ube0c\ud074\ub798\uc2a4\uc778 AppCompatActivity\ub97c \uc0ac\uc6a9\ud558\uace0 \uc788\ub2e4\uba74 \ubcc4\ub3c4\ub85c ViewModelStoreOwner\ub97c \uad6c\ud604\ud560 \ud544\uc694\ub294 \uc5c6\ub2e4. Fragment \ub610\ud55c ViewModelStoreOwner\ub97c \uad6c\ud604\ud558\uace0 \uc788\ub2e4. ViewModel\uc758 \uc0dd\uba85\uc8fc\uae30\ub97c Fragment\uc640 \ud568\uaed8\ud558\uae38 \uc6d0\ud558\ub294 \uacbd\uc6b0\uc5d0\ub294 ViewModelProvider\uc5d0\uc11c \uc0dd\uc131\uc790 \uccab\ubc88\uc9f8\uc778\uc790\ub85c ViewModelStoreOwner\ub97c \uc9c0\uc815\ud560 \ub54c ComponentActivity \uc11c\ube0c\ud074\ub798\uc2a4 \ub300\uc2e0 Fragment\ub97c \ub118\uaca8\uc8fc\uba74 \ub41c\ub2e4.<\/p>\n<p>ViewModelProvider.Factory\uc758 \uacbd\uc6b0 ViewModelProvider \ub0b4\uc5d0 \uc120\uc5b8\ub41c ViewModelProvider.Factory\uc758 \uc11c\ube0c \ud074\ub798\uc2a4\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4. \uc0dd\uc131\uc790\uac00 \uc5c6\ub294 ViewModel\uc744 \uc778\uc2a4\ud134\uc2a4\ud654 \ud558\ub294 \uacbd\uc6b0\uc5d0\ub9cc \uac04\ub2e8\ud788 NewInstanceFactory \ud074\ub798\uc2a4\ub97c \uc0ac\uc6a9\ud558\uace0, \uadf8 \uc678\uc5d0\ub294 \uc9c1\uc811 ViewModelProvider.Factory\ub97c \uad6c\ud604\ud574\uc57c \ud55c\ub2e4.<\/p>\n<p>ViewModel\uc758 \uacbd\uc6b0 application\uc744 \uba64\ubc84\ub85c \uac16\ub294 AndroidViewModel\uc774\ub77c\ub294 \ud074\ub798\uc2a4\uac00 \uc774\ubbf8 \uc815\uc758\ub418\uc5b4\uc788\ub2e4. \uc774 \ud074\ub798\uc2a4\ub97c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0 ViewModelProvider.AndroidViewModelFactory\ub97c \uc0ac\uc6a9\ud558\uc5ec AndroidViewModel\uc744 \ub2e4\uc74c\uacfc \uac19\uc774 \uc778\uc2a4\ud134\ud654 \ud560 \uc218 \uc788\ub2e4.<\/p>\n<pre class=\"lang:null decode:true lang:\">viewModel = ViewModelProvider(this, ViewModelProvider.AndroidViewModelFactory(application))\r\n    .get(MainViewModel::class.java)<\/pre>\n<h2>ViewModel\uc744 \uc774\uc6a9\ud55c Fragment\uac04\uc758 Data \uacf5\uc720<a href=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/05\/SharedViewModel.png\"><br \/>\n<\/a><\/h2>\n<p>\uc561\ud2f0\ube44\ud2f0\ub0b4\uc5d0\uc11c \ud504\ub808\uadf8\uba3c\ud2b8\uac04\uc758 \ub370\uc774\ud130 \ub610\ub294 \uc774\ubca4\ud2b8\ub97c \uacf5\uc720\ud558\ub294 \uac83\uc740 \uc77c\ubc18\uc801\uc774\ub2e4.<br \/>\nViewModel\uc744 \uc0ac\uc6a9\ud558\uba74\u00a0 \uc774\ub97c \uc880 \ub354 \uc27d\uac8c \ud574\uacb0\ud560 \uc218 \uc788\ub2e4<a href=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/05\/SharedViewModel.png\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/05\/SharedViewModel-1024x638.png\" alt=\"\" width=\"750\" height=\"467\" class=\"aligncenter size-large wp-image-44172\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/05\/SharedViewModel-1024x638.png 1024w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/05\/SharedViewModel-300x187.png 300w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/05\/SharedViewModel-768x478.png 768w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/05\/SharedViewModel.png 1272w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/a><\/p>\n<p>\uc55e\uc758 \uadf8\ub9bc\uc744 \uc0b4\ud3b4\ubcf4\uba74 SharedViewModel\uc5d0 \ub450 Fragment\uac00 \ub3d9\uc2dc\uc5d0 \uc811\uadfc\ud558\uace0 \uc788\ub2e4. SharedViewModel\uc744 \uc778\uc2a4\ud134\uc2a4\ub97c \uc5bb\uc744 \ub54c ViewModelProvider\uc758 \uccab\ubc88\uc9f8 \uc0dd\uc131\uc790 \ub9e4\uac1c\ubcc0\uc218\uc778 ViewModelStoreOwner\ub97c Fragment\ub4e4\uc774 \uc18d\ud574\uc788\ub294 \ubd80\ubaa8 Activity\ub85c \uc9c0\uc815\ud558\uc790. \uadf8\ub7ec\uba74 \uac01 \ud504\ub808\uadf8\uba3c\ud2b8\ub294 \ub3d9\uc77c\ud55c SharedViewModel \uc778\uc2a4\ud134\uc2a4\ub97c \uc5bb\uac8c \ub41c\ub2e4. SharedViewModel\uc758 \uc0dd\uba85\uc8fc\uae30\ub294 Activity\ub97c \ub530\ub974\uac8c \ub418\uace0, Fragment\uc758 \uc0dd\uba85\uc8fc\uae30\ub294 Activity\uc758 \uc11c\ube0c\uc14b\uc774\ubbc0\ub85c Fragment\uc758 \uc0dd\uba85\uc8fc\uae30 \ub3d9\uc548\uc5d0 \uc790\uc720\ub86d\uac8c \ub370\uc774\ud130\ub97c \uacf5\uc720\ud560 \uc218 \uc788\uac8c \ub41c\ub2e4.<\/p>\n<p>\ucf54\ub4dc\ub97c \uc0b4\ud3b4\ubcf4\uc790.<\/p>\n<pre class=\"lang: decode:true \">class SharedViewModel : ViewModel(){\r\n    val count = MutableLiveData&lt;Int&gt;().apply { value = 0 }\r\n}<\/pre>\n<pre class=\"lang: decode:true\">class MasterFragment : Fragment(){\r\n\r\n    private lateinit var viewModel : SharedViewModel\r\n\r\n    override fun onCreate(savedInstanceState: Bundle?) {\r\n        super.onCreate(savedInstanceState)\r\n        activity?.run {\r\n            viewModel = ViewModelProvider(this, ViewModelProvider.NewInstanceFactory())\r\n                .get(SharedViewModel::class.java)\r\n        }\r\n    }\r\n\r\n}<\/pre>\n<pre class=\"lang: decode:true \">class DetailFragment : Fragment(){\r\n\r\n    private lateinit var viewModel : SharedViewModel\r\n\r\n    override fun onCreate(savedInstanceState: Bundle?) {\r\n        super.onCreate(savedInstanceState)\r\n        activity?.run {\r\n            viewModel = ViewModelProvider(this, ViewModelProvider.NewInstanceFactory())\r\n                .get(SharedViewModel::class.java)\r\n        }\r\n    }\r\n\r\n}<\/pre>\n<p>Activity\ubc94\uc704\ub0b4\uc5d0\uc11c ViewModel\uc744 \uacf5\uc720\ud558\uc5ec \ud504\ub808\uadf8\uba3c\ud2b8\uac00 \ub370\uc774\ud130\ub97c \uacf5\uc720\ud558\ub294 \uacbd\uc6b0 \ub2e4\uc74c\uacfc \uac19\uc740 \uc7a5\uc810\uc744 \uac16\ub294\ub2e4. (<a href=\"https:\/\/developer.android.com\/topic\/libraries\/architecture\/viewmodel?hl=ko#sharing\">\uacf5\uc2dd\ubb38\uc11c \ucc38\uc870<\/a>)<\/p>\n<ul>\n<li>Activity\ub294 Fragment \ucee4\ubba4\ub2c8\ucf00\uc774\uc158\uc5d0 \uac1c\uc785\ud558\uc9c0 \uc54a\uc544\ub3c4 \ub41c\ub2e4.<\/li>\n<li>Fragment\ub294 SharedViewModel\uc678\uc5d0 \ub2e4\ub978 \ubd80\ubd84\uc5d0 \ub300\ud574\uc11c \uc758\uc874\ud558\uc9c0 \uc54a\uc544\ub3c4 \ub41c\ub2e4. \ud504\ub808\uadf8\uba3c\ud2b8 \uc911 \ud558\ub098\uac00 \uc0ac\ub77c\uc838\ub3c4 \ub2e4\ub978 \ud504\ub808\uadf8\uba3c\ud2b8\ub294 \ud3c9\uc18c\ucc98\ub7fc \ub3d9\uc791\ud55c\ub2e4.<\/li>\n<li>\uac01 \ud504\ub808\uadf8\uba3c\ud2b8\ub294 \uc790\uccb4 \uc0dd\uba85\uc8fc\uae30\ub97c \uac00\uc9c0\uace0 \uc788\uace0, \ub2e4\ub978 \ud504\ub808\uadf8\uba3c\ud2b8\uc758 \uc0dd\uba85\uc8fc\uae30\uc5d0 \uc601\ud5a5\uc744 \uc8fc\uac70\ub098 \ubc1b\uc9c0 \uc54a\ub294\ub2e4.\u00a0<\/li>\n<\/ul>\n<p>\uacb0\uad6d Activity\uc640 Fragment\ub4e4\uc774 \uac15\ud558\uac8c \uacb0\ud569\ub418\uc5b4\uc788\ub358 \ubd80\ubd84\uc744 \ub290\uc2a8\ud558\uac8c \ub9cc\ub4dc\ub294 \ud6a8\uacfc\ub97c \uc8fc\uba74\uc11c \uc720\uc9c0\ubcf4\uc218\ub098 \ud655\uc7a5\uc131 \uce21\uba74\uc5d0\uc11c \ub9ce\uc740 \uc774\ub4dd\uc744 \ubcfc\uc218 \uc788\uac8c \ub41c\ub2e4.<\/p>\n<p>\uc608\uc81c\ucf54\ub4dc\ub294 <a href=\"https:\/\/github.com\/Charlezz\/ViewModelSample\">github<\/a>\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\ub2e4.<\/p>\n<h2>TL;DR<\/h2>\n<p>ViewModel\uc744 \uc0ac\uc6a9\ud558\uc5ec \uad00\uc2ec\uc0ac\ubd84\ub9ac\ub97c \ud558\uace0, Activity \uc7ac\uc0dd\uc131\uc2dc\uc5d0\ub3c4 \ub370\uc774\ud130\ub97c \uc720\uc9c0\ud558\uba70, Fragment\uac04 \ub370\uc774\ud130\ub97c \uacf5\uc720\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\ubcf4\uc558\ub2e4.<\/p>\n<p>\uc774\ubbf8 \ubcc4\ub3c4\uc758 \uc194\ub8e8\uc158\uc774 \uc788\ub2e4\uba74 ViewModel\uc744 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc544\ub3c4 \uc88b\ub2e4. \ubcf5\uc7a1\ud574\ubcf4\uc77c\uc9c0 \ubab0\ub77c\ub3c4 \uad6c\ud604\ud558\ub294 \ubc29\ubc95\uc740 \uac04\ub2e8\ud558\ubbc0\ub85c\u00a0 \uba87\uc904\uc758 \ucf54\ub4dc\ub85c \uc5ec\ub7ec\uac00\uc9c0 \uc7a5\uc810\uc744 \uc5bb\uc744 \uc218 \uc788\uc73c\ub2c8 ViewModel\uc0ac\uc6a9\uc744 \uac15\ub825\ud558\uac8c \uad8c\uc7a5\ud55c\ub2e4.\u00a0<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>ViewModel\uc774\ub780? ViewModel\uc774\ub780 Android Jepack\uc758 \uad6c\uc131\uc694\uc18c \uc911 \ud558\ub098\ub85c, \ubcf8\ub798 ViewModel\uc774\ub780 \uc774\ub984\uc740 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uac1c\ubc1c \ub514\uc790\uc778 \ud328\ud134\uc911 \ud558\ub098\uc778 MVVM(Model &#8211; View &#8211; ViewModel) \ub514\uc790\uc778 \ud328\ud134\uc73c\ub85c\ubd80\ud130 \ud30c\uc0dd\ub418\uc5c8\ub2e4. MVVM\uc758 \uad00\uc810\uc5d0\uc11c \ubd80\ub974\ub294 ViewModel\uacfc Android Jetpack\uc5d0 \ud3ec\ud568\ub41c ViewModel \ud074\ub798\uc2a4\ub97c \uad6c\ubd84\ud558\uae30 \uc704\ud574 \ud754\ud788 Android Jetpack\uc5d0 \ud3ec\ud568\ub41c ViewModel\uc744 Android Architecture ViewModel\uc758 \uc57d\uc790\uc778 AAC ViewModel\uc774\ub77c\uace0 \ubd80\ub974\uae30\ub3c4 \ud55c\ub2e4. ViewModel\uc740 \uc65c \ud544\uc694\ud558\uc9c0? [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"inline_featured_image":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[16],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/44167"}],"collection":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=44167"}],"version-history":[{"count":6,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/44167\/revisions"}],"predecessor-version":[{"id":44204,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/44167\/revisions\/44204"}],"wp:attachment":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=44167"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=44167"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=44167"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}