{"id":45066,"date":"2021-05-11T12:29:30","date_gmt":"2021-05-11T03:29:30","guid":{"rendered":"https:\/\/www.charlezz.com\/?p=45066"},"modified":"2021-05-11T12:29:30","modified_gmt":"2021-05-11T03:29:30","slug":"dagger2%eb%a5%bc-%ec%95%8c%ec%95%84%eb%b3%b4%ec%9e%90-dynamic-feature-module%ec%97%90-%ec%a0%81%ec%9a%a9%ed%95%98%ea%b8%b0","status":"publish","type":"post","link":"https:\/\/charlezz.com\/?p=45066","title":{"rendered":"Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 \u2013 Dynamic Feature Module\uc5d0 \uc801\uc6a9\ud558\uae30"},"content":{"rendered":"<p><a href=\"https:\/\/www.charlezz.com\/?p=1259\">Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 \u2013 \uae30\ubcf8\ud3b8<\/a><br \/>\n<a href=\"https:\/\/www.charlezz.com\/?p=1289\">Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 \u2013 Scope<\/a><span>\u00a0<\/span><br \/>\n<a href=\"https:\/\/www.charlezz.com\/?p=1297\">Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 \u2013 Injection\uc758 \uc885\ub958<\/a><span>\u00a0<\/span><br \/>\n<a href=\"https:\/\/www.charlezz.com\/?p=1299\">Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 \u2013 Qualifier<\/a><span>\u00a0<\/span><br \/>\n<a href=\"https:\/\/www.charlezz.com\/?p=1313\">Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 \u2013 Binding<\/a><span>\u00a0<\/span><br \/>\n<a href=\"https:\/\/www.charlezz.com\/?p=1315\">Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 \u2013 Multibinding<\/a><span>\u00a0<\/span><br \/>\n<a href=\"https:\/\/www.charlezz.com\/?p=1336\">Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 \u2013 SubComponent<\/a><span>\u00a0<\/span><br \/>\n<a href=\"https:\/\/www.charlezz.com\/?p=1357\"><span>Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 \u2013 Android<\/span><\/a><br \/>\n<span>Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 \u2013 Testing(\uc900\ube44\uc911)<\/span><br \/>\n<span>Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 \u2013 Dynamic Feature\uc5d0 \uc801\uc6a9\ud558\uae30(You\u2019re here)<\/span><\/p>\n<h1>Dynamic Feature Module\uc5d0 Dagger \uc801\uc6a9\ud558\uae30<\/h1>\n<p><a href=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2021\/05\/www.charlezz.com-dagger2-dynamic-feature-module-screenshot-116.png\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2021\/05\/www.charlezz.com-dagger2-dynamic-feature-module-screenshot-116-1024x342.png\" alt=\"\" width=\"750\" height=\"250\" class=\"alignnone size-large wp-image-45067\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2021\/05\/www.charlezz.com-dagger2-dynamic-feature-module-screenshot-116-1024x342.png 1024w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2021\/05\/www.charlezz.com-dagger2-dynamic-feature-module-screenshot-116-300x100.png 300w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2021\/05\/www.charlezz.com-dagger2-dynamic-feature-module-screenshot-116-768x257.png 768w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/a><\/p>\n<p>\uc704\uc758 \uadf8\ub9bc\uc744 \ubcf4\uba74 \uc77c\ubc18\uc801\uc778 \ub77c\uc774\ube0c\ub7ec\ub9ac \ubaa8\ub4c8\uacfc \ub2ec\ub9ac DFM(Dynamic Feature Module)\uc740 app\ubaa8\ub4c8(base\ubaa8\ub4c8)\uacfc \uc758 \uc758\uc874\uad00\uacc4\uac00 \uc5ed\uc804\ub41c\ub2e4.\u00a0<\/p>\n<p>app\ubaa8\ub4c8\uc5d0\uc11c \uc77c\ubc18\uc801\uc778 \ub77c\uc774\ube0c\ub7ec\ub9ac \ubaa8\ub4c8\uc744 \uc758\uc874\ud558\ub294 \uacbd\uc6b0 \ucef4\ud30c\uc77c \ud0c0\uc784\uc5d0 \ud574\ub2f9 \ubaa8\ub4c8\uc744 \ucc38\uc870\ud560 \uc218 \uc788\uae30 \ub54c\ubb38\uc5d0 \ubb38\uc81c\uac00 \ub418\uc9c0 \uc54a\ub294\ub2e4. \ud558\uc9c0\ub9cc app\ubaa8\ub4c8\uc5d0\uc11c DFM\uc744 \uc758\uc874\ud558\ub294 \uacbd\uc6b0 app\ubaa8\ub4c8\uc758 \uc5b4\ub178\ud14c\uc774\uc158 \ud504\ub85c\uc138\uc11c\uac00 DFM \uc5b4\ub178\ud14c\uc774\uc158\uc815\ubcf4\ub97c \uac00\uc838 \uc62c \uc218 \uc5c6\uc73c\ubbc0\ub85c @ContributeAndroidInjector \uc0ac\uc6a9 \ubc0f \uc11c\ube0c \ucef4\ud3ec\ub10c\ud2b8 \uad6c\uc131\uc774 \uc5b4\ub824\uc6cc \uc9c4\ub2e4.<\/p>\n<p>\uadf8\ub798\uc11c DFM\uc5d0\uc11c app\ubaa8\ub4c8\uc5d0 \uc788\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub97c \ud655\uc7a5\ud558\ub294 \ubc29\ubc95\uc73c\ub85c \ubb38\uc81c\ub97c \ud574\uacb0\ud560 \uc218 \uc788\ub2e4.<\/p>\n<p><a href=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2021\/05\/www.charlezz.com-dagger2-dynamic-feature-module-screenshot-117.png\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2021\/05\/www.charlezz.com-dagger2-dynamic-feature-module-screenshot-117-1024x447.png\" alt=\"\" width=\"750\" height=\"327\" class=\"alignnone size-large wp-image-45068\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2021\/05\/www.charlezz.com-dagger2-dynamic-feature-module-screenshot-117-1024x447.png 1024w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2021\/05\/www.charlezz.com-dagger2-dynamic-feature-module-screenshot-117-300x131.png 300w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2021\/05\/www.charlezz.com-dagger2-dynamic-feature-module-screenshot-117-768x335.png 768w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/a><\/p>\n<p>@Component\uc758 \uba64\ubc84\ub85c dependencies \ud56d\ubaa9\uc774 \uc788\ub294\ub370 \uc774\ub97c \uc0ac\uc6a9\ud558\uba74 \ud2b9\uc815 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc0c1\uc18d\ud558\ub294 \ubc29\uc2dd\uc73c\ub85c \uc624\ube0c\uc81d\ud2b8 \uadf8\ub798\ud504\ub97c \ud655\uc7a5\ud560 \uc218 \uc788\ub2e4.<\/p>\n<pre class=\"lang: decode:true \">@FeatureScope\r\n@Component(\r\n    dependencies = [ApplicationComponent::class],\r\n    modules =[\r\n        AndroidSupportInjectionModule::class,\r\n        FeatureModule::class\r\n    ]\r\n)\r\ninterface FeatureComponent:AndroidInjector&lt;FeatureActivity&gt;{\r\n    @Component.Factory\r\n    abstract class Factory{\r\n        abstract fun create(\r\n            @BindsInstance activity: FeatureActivity,\r\n            component: ApplicationComponent): AndroidInjector&lt;FeatureActivity&gt;\r\n    }\r\n}\r\n<\/pre>\n<pre class=\"lang: decode:true\">class FeatureActivity: DaggerAppCompatActivity(){\r\n\r\n    @Inject\r\n    @JvmField\r\n    @Volatile\r\n    var androidInjector: DispatchingAndroidInjector&lt;Any&gt;? = null\r\n\r\n    override fun onCreate(savedInstanceState: Bundle?) {\r\n        injectIfNecessary()\r\n        super.onCreate(savedInstanceState)\r\n        \/\/\u2026\r\n    }\r\n\r\n    private fun injectIfNecessary() {\r\n        if (androidInjector == null) {\r\n            synchronized(this) {\r\n                if (androidInjector == null) {\r\n                    DaggerFeatureComponent.factory()\r\n                        .create(this, MyApplication.applicationComponent())\r\n                        .inject(this)\r\n                    checkNotNull(androidInjector) {\u2026}\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    override fun androidInjector(): AndroidInjector&lt;Any?&gt;? {\r\n        injectIfNecessary()\r\n        return androidInjector\r\n    }\r\n\r\n}<\/pre>\n<p>\uc8fc\uc758\ud574\uc57c \ud560 \uc810\uc740 AndroidInjector\ub85c \uc778\uc81d\uc158 \ud558\ub294 \ub300\uc2e0 \ud655\uc7a5\ud55c \ucef4\ud3ec\ub10c\ud2b8 \uac1d\uccb4\ub85c \uba64\ubc84-\uc778\uc81d\uc158\uc744 \ud574\uc918\uc57c \ud55c\ub2e4\ub294 \uc810\uc774\ub2e4.\u00a0<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 \u2013 \uae30\ubcf8\ud3b8 Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 \u2013 Scope\u00a0 Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 \u2013 Injection\uc758 \uc885\ub958\u00a0 Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 \u2013 Qualifier\u00a0 Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 \u2013 Binding\u00a0 Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 \u2013 Multibinding\u00a0 Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 \u2013 SubComponent\u00a0 Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 \u2013 Android Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 \u2013 Testing(\uc900\ube44\uc911) Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 \u2013 Dynamic Feature\uc5d0 \uc801\uc6a9\ud558\uae30(You\u2019re here) Dynamic Feature Module\uc5d0 Dagger \uc801\uc6a9\ud558\uae30 \uc704\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":[28],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/45066"}],"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=45066"}],"version-history":[{"count":1,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/45066\/revisions"}],"predecessor-version":[{"id":45069,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/45066\/revisions\/45069"}],"wp:attachment":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=45066"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=45066"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=45066"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}