{"id":919,"date":"2018-11-16T12:30:04","date_gmt":"2018-11-16T03:30:04","guid":{"rendered":"https:\/\/www.charlezz.com\/?p=919"},"modified":"2018-11-16T12:37:52","modified_gmt":"2018-11-16T03:37:52","slug":"dagger2%ec%99%80-aac-viewmodel%ec%9d%84-%ea%b0%99%ec%9d%b4-%ec%8d%bc%ec%9d%84-%eb%95%8c-%ec%83%9d%ea%b8%b8-%ec%88%98-%ec%9e%88%eb%8a%94-%eb%ac%b8%ec%a0%9c%ec%a0%90","status":"publish","type":"post","link":"https:\/\/charlezz.com\/?p=919","title":{"rendered":"Dagger2\uc640 AAC ViewModel\uc744 \uac19\uc774 \uc37c\uc744 \ub54c \uc0dd\uae38 \uc218 \uc788\ub294 \ubb38\uc81c\uc810"},"content":{"rendered":"<table border=\"1\" style=\"border-collapse: collapse; width: 100%;\">\n<tbody>\n<tr>\n<td style=\"width: 100%;\">\uc774 \ud3ec\uc2a4\ud305\uc5d0\uc11c <a href=\"https:\/\/www.charlezz.com\/?p=428\">Dagger2<\/a>\uc640 <a href=\"https:\/\/www.charlezz.com\/?p=365\">ViewModel<\/a>\uc5d0 \ub300\ud55c \uc124\uba85\uc740 \ub2e4\ub8e8\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Dagger2\uc640 AAC\uc758 ViewModel\uac19\uc774 \uc37c\uc744\ub54c\uc758 \ubb38\uc81c\uc810<\/h2>\n<p>Dagger2\uc640 ViewModel\uc744 \uac19\uc774 \uc4f0\ub2e4\uac00 \uc0dd\uae34 \ubb38\uc81c\uac00 \ud558\ub098 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>AAC\ubdf0\ubaa8\ub378\uc744 \uc4f4\ub2e4\uba74, \uc561\ud2f0\ube44\ud2f0\uc758 configurationChange\uac00 \ubc1c\uc0dd\ud588\uc744\ub54c ViewModel\uc758 \uc778\uc2a4\ud134\uc2a4\ub97c \uc0c8\ub85c \ub9cc\ub4e4\uc9c0 \uc54a\uace0 \uc720\uc9c0\ud558\ub294\uac8c \uc7a5\uc810\uc911 \ud558\ub098\uc778\ub370, Dagger2\ub97c \ud1b5\ud574 ViewModel\uc778\uc2a4\ud134\uc2a4\ub97c \uc778\uc81d\uc158\ud588\uc744 \ub54c \ub9e4\ubc88 \uc0c8\ub85c\uc6b4 \uc778\uc2a4\ud134\uc2a4\ub97c \ub9cc\ub4e4\uc5b4\ub0b8\ub2e4\ub294 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<p><strong>\uc6d0\uc778\uc740 appcompat Support Library\uc5d0 \uc788\uc5c8\uc2b5\ub2c8\ub2e4.<\/strong><\/p>\n<p>Activity\uc758 \uc778\uc2a4\ud134\uc2a4\uac00 \uc0c8\ub85c \uc0dd\uc131\ub418\ub354\ub77c\ub3c4 ViewModel \uc778\uc2a4\ud134\uc2a4\uac00 \uadf8\ub300\ub85c \uc720\uc9c0\ub420\uc218 \uc788\ub294 \uc774\uc720\uac00 ViewModelProviders\ub97c \ud1b5\ud574 \uc2f1\uae00\ud1a4 \ud615\ud0dc\ub85c \uc800\uc7a5\ud558\uace0 \uc788\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:java decode:true\">public class HolderFragment extends Fragment implements ViewModelStoreOwner {\r\n    ...\r\n    \r\n    private ViewModelStore mViewModelStore = new ViewModelStore();\r\n   \r\n    ...\r\n   \r\n    public HolderFragment() {\r\n        setRetainInstance(true);\r\n    }\r\n\r\n    ...\r\n}<\/pre>\n<p>\uc704 \ucf54\ub4dc\ub97c \ubcf4\uc2dc\uba74\u00a0HolderFragment\ub77c\ub294 \ud504\ub808\uadf8\uba3c\ud2b8\ub294\u00a0ViewModelStoreOwner\ub97c \uad6c\ud604\ud558\uace0, ViewModelStore\ub77c\ub294 \ubdf0\ubaa8\ub378 \uc800\uc7a5\uc18c\ub97c \ub4e4\uace0 \uc788\uc2b5\ub2c8\ub2e4.\u00a0 setRetainInstance(true)\uac00 \uc0dd\uc131\uc790 \ub2e8\uc5d0\uc11c \ud638\ucd9c\ub418\uc5b4\uc788\uae30 \ub54c\ubb38\uc5d0 \ud504\ub808\uadf8\uba3c\ud2b8\uac00 \uc774\uc804\uc0c1\ud0dc\ub97c \uae30\uc5b5\ud558\ubbc0\ub85c, \uc561\ud2f0\ube44\ud2f0\uac00 \uc7ac\uc0dd\uc131\ub418\ub3c4 \uc774 \ud504\ub808\uadf8\uba3c\ud2b8\uac00 \ubcf5\uad6c \ub418\uba74\uc11c \uc774\uc804 \ubdf0\ubaa8\ub378\uc744 \uac00\uc838\uc62c\uc218 \uc788\uc5c8\ub358 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<p>Dagger2 \uc0ac\uc6a9\uc2dc \uc77c\ubc18\uc801\uc73c\ub85c Inject()\ud558\ub294 \uc2dc\uc810\uc740 \uc561\ud2f0\ube44\ud2f0\uc758 super.onCreate() \uc774\uc804\uc785\ub2c8\ub2e4.<\/p>\n<p>onCreate()\uac00 \ubd88\ub9ac\ub294 \uc2dc\uc810 \uc774\uc804\uc774\ub77c\uba74 \ud504\ub808\uadf8\uba3c\ud2b8\uac00 \ubcf5\uad6c\uac00 \uc544\uc9c1 \uc548\ub41c \uc0c1\ud0dc\uc774\uae30\ub54c\ubb38\uc5d0 ViewModel\uc744 \ucc3e\uc73c\ub824\uace0 \ud574\ub3c4 \ucc3e\uc744\uc218\uac00 \uc5c6\uac8c\ub418\uc5b4 \uc0c8\ub85c \uc0dd\uc131\ud558\uac8c \ub418\uc5c8\ub358 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<p>appcompat support library 28\ubc84\uc804 \uc774\ud6c4\ub85c\ub294 ViewModelStoreOwner\ub97c FragmentActivity\uc5d0 \uad6c\ud604\uc744 \ud588\uae30\ub54c\ubb38\uc5d0<\/p>\n<pre class=\"lang:java decode:true \">@NonNull\r\npublic ViewModelStore getViewModelStore() {\r\n    if (this.getApplication() == null) {\r\n        throw new IllegalStateException(\"Your activity is not yet attached to the Application instance. You can't request ViewModel before onCreate call.\");\r\n    } else {\r\n        if (this.mViewModelStore == null) {\r\n            FragmentActivity.NonConfigurationInstances nc = (FragmentActivity.NonConfigurationInstances)this.getLastNonConfigurationInstance();\r\n            if (nc != null) {\r\n                this.mViewModelStore = nc.viewModelStore;\r\n            }\r\n            if (this.mViewModelStore == null) {\r\n                this.mViewModelStore = new ViewModelStore();\r\n            }\r\n        }\r\n        return this.mViewModelStore;\r\n    }\r\n}<\/pre>\n<p>\ub2e4\uc74c\uacfc \uac19\uc774 \uc774\uc804 \uc0c1\ud0dc\uac00 \uc774\ubbf8 \ubcf5\uad6c\ub41c \uc0c1\ud0dc\ub85c ViewModelStore\ub97c \uac00\uc838\uc62c \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc2e4\uc81c\u00a0mLastNonConfigurationInstances\uac00 assign\ub418\ub294 \ub2e8\uacc4\ub294 Activity\ub0b4\uc758 attach()\uc778\ub370 internalAPI\ub77c \ubcf4\uc774\uc9c4 \uc54a\uc2b5\ub2c8\ub2e4.<\/p>\n<h1>Conclusion<\/h1>\n<p>ViewModel\uc744 Dagger\uc5d0\uc11c \uc0ac\uc6a9\uc2dc\uc5d0\ub294 Appcompat Support Library\uac00 28\uc774\uc0c1\uc778\uc9c0 \uaf2d \ud655\uc778\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\uc774 \ud3ec\uc2a4\ud305\uc5d0\uc11c Dagger2\uc640 ViewModel\uc5d0 \ub300\ud55c \uc124\uba85\uc740 \ub2e4\ub8e8\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. Dagger2\uc640 AAC\uc758 ViewModel\uac19\uc774 \uc37c\uc744\ub54c\uc758 \ubb38\uc81c\uc810 Dagger2\uc640 ViewModel\uc744 \uac19\uc774 \uc4f0\ub2e4\uac00 \uc0dd\uae34 \ubb38\uc81c\uac00 \ud558\ub098 \uc788\uc2b5\ub2c8\ub2e4. AAC\ubdf0\ubaa8\ub378\uc744 \uc4f4\ub2e4\uba74, \uc561\ud2f0\ube44\ud2f0\uc758 configurationChange\uac00 \ubc1c\uc0dd\ud588\uc744\ub54c ViewModel\uc758 \uc778\uc2a4\ud134\uc2a4\ub97c \uc0c8\ub85c \ub9cc\ub4e4\uc9c0 \uc54a\uace0 \uc720\uc9c0\ud558\ub294\uac8c \uc7a5\uc810\uc911 \ud558\ub098\uc778\ub370, Dagger2\ub97c \ud1b5\ud574 ViewModel\uc778\uc2a4\ud134\uc2a4\ub97c \uc778\uc81d\uc158\ud588\uc744 \ub54c \ub9e4\ubc88 \uc0c8\ub85c\uc6b4 \uc778\uc2a4\ud134\uc2a4\ub97c \ub9cc\ub4e4\uc5b4\ub0b8\ub2e4\ub294 \uac83\uc785\ub2c8\ub2e4. \uc6d0\uc778\uc740 appcompat Support Library\uc5d0 \uc788\uc5c8\uc2b5\ub2c8\ub2e4. Activity\uc758 [&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\/919"}],"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=919"}],"version-history":[{"count":2,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/919\/revisions"}],"predecessor-version":[{"id":921,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/919\/revisions\/921"}],"wp:attachment":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=919"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=919"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=919"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}