{"id":43901,"date":"2020-01-19T23:28:50","date_gmt":"2020-01-19T14:28:50","guid":{"rendered":"https:\/\/www.charlezz.com\/?p=43901"},"modified":"2020-01-22T08:57:33","modified_gmt":"2020-01-21T23:57:33","slug":"%eb%8b%a4%ec%a4%91-%eb%aa%a8%eb%93%88%ec%9d%84-%ec%82%ac%ec%9a%a9%ed%95%98%eb%8a%94-%ec%95%b1%ec%97%90%ec%84%9c-dagger-%ec%a0%81%ec%9a%a9%ed%95%98%ea%b8%b0","status":"publish","type":"post","link":"https:\/\/charlezz.com\/?p=43901","title":{"rendered":"\uba40\ud2f0 \ubaa8\ub4c8\uc744 \uc0ac\uc6a9\ud558\ub294 \uc571\uc5d0\uc11c Dagger \uc801\uc6a9\ud558\uae30"},"content":{"rendered":"<h1>\uba40\ud2f0 \ubaa8\ub4c8\uc744 \uc0ac\uc6a9\ud558\ub294 \uc571\uc5d0\uc11c Dagger \uc801\uc6a9\ud558\uae30<\/h1>\n<p>\uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uac1c\ubc1c\uc2dc \ub2e4\uc74c\uacfc \uac19\uc740 \ud2b9\uc218\ud55c \ubaa9\uc801\uc73c\ub85c \uac00\uc9c0\uace0 \uba40\ud2f0 \ubaa8\ub4c8\uc744 \uc0ac\uc6a9\ud55c \uac1c\ubc1c \ubc29\ubc95\uc744 \ud0dd\ud560 \uc218 \uc788\ub2e4.<\/p>\n<ul>\n<li>\ub300\uaddc\ubaa8 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c\uc758 \uac1c\ubc1c\uc790\uac04 \ud611\uc5c5<\/li>\n<li>\ube4c\ub4dc \uc2dc\uac04 \ub2e8\ucd95<\/li>\n<li>\ubaa8\ub4c8\uc758 \uc7ac\uc0ac\uc6a9<\/li>\n<li>\uc5ec\ub7ec\uac00\uc9c0 \ubc84\uc804\uc758 \uc571\uc744 \ub9cc\ub4e4 \ub54c<\/li>\n<li>APK \uc6a9\ub7c9\uc744 \uc904\uc77c \ub54c ( Dynamic Feature Module)<\/li>\n<\/ul>\n<p>\uc548\ub4dc\ub85c\uc774\ub4dc \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c \uba40\ud2f0 \ubaa8\ub4c8\uc758 \uc885\ub958\ub294 \uc77c\ubc18\uc801\uc778 \ubaa8\ub4c8\uacfc \ub2e4\uc774\ub098\ubbf9 \ud53c\uccd0 \ubaa8\ub4c8 \ub450\uac00\uc9c0\uac00 \uc788\ub2e4. \uc5b4\ub5a4 \ubaa8\ub4c8\uc744 \uc0ac\uc6a9\ud558\ub290\ub0d0\uc5d0 \ub530\ub77c Dagger\ub97c \uc0ac\uc6a9\ud55c \uc758\uc874\uc131 \uc8fc\uc785 \uc124\uacc4 \ubc29\ubc95\uc774 \ub2ec\ub77c\uc9c4\ub2e4.<\/p>\n<h3>\uba40\ud2f0 \ubaa8\ub4c8\uc744 \uc0ac\uc6a9\ud558\ub294 \ud504\ub85c\uc81d\ud2b8<\/h3>\n<p>\uc77c\ubc18\uc801\uc778 \ubaa8\ub4c8\uc744 \uc0ac\uc6a9\ud558\ub294 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c\ub294 \ud558\uc704 \ubaa8\ub4c8\uc740 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ubaa8\ub4c8\uc744 \ucc38\uc870\ud560 \uc218 \uc5c6\ub2e4. \uadf8\ub807\uae30 \ub54c\ubb38\uc5d0 \ubaa8\ub4c8\uac04\uc758 \uc758\uc874\uc131 \ubc29\ud5a5\uc740 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ubaa8\ub4c8\uc774 \ud558\uc704 \ubaa8\ub4c8\uc744 \ucc38\uc870\ud558\ub294 \ud615\ud0dc\uc774\uace0, \ud558\uc704 \ubaa8\ub4c8\uc758 Dagger \ucef4\ud3ec\ub10c\ud2b8\ub294 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ubaa8\ub4c8\uc758 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc758\uc874\ud558\ub294 \ud615\ud0dc\uac00 \ub41c\ub2e4. \ub2e4\uc74c \uadf8\ub9bc\uc744 \ucc38\uc870\ud558\uc790.<\/p>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/developer.android.com\/images\/training\/dependency-injection\/5-graph-modules.png\" width=\"1662\" height=\"1122\" class=\"alignnone size-large\" \/><\/p>\n<p>[\uadf8\ub9bc 1] \uba40\ud2f0 \ubaa8\ub4c8 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c \ub300\uac70 \uadf8\ub798\ud504\uc758 \uc608\uc2dc<\/p>\n<p>\uba40\ud2f0 \ubaa8\ub4c8 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c \uac19\uc740 \ub808\ubca8\uc5d0 \uc788\ub294 \ubaa8\ub4c8\ub4e4\uc774 \uc11c\ub85c \uc758\uc874\ud574\uc11c\ub294 \uc548\ub41c\ub2e4. \uc774 \uacbd\uc6b0 \uc21c\ud658\ucc38\uc870\uac00 \uc774\ub8e8\uc5b4 \uc9c0\uae30\u00a0 \ub54c\ubb38\uc5d0 \uc5ec\ub7ec\uac00\uc9c0 \ubb38\uc81c\ub4e4\uc774 \ubc1c\uc0dd\ud55c\ub2e4.<\/p>\n<p><a href=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/01\/c1-1.png\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/01\/c1-1.png\" alt=\"\" width=\"254\" height=\"158\" class=\"aligncenter size-full wp-image-43903\" \/><\/a><\/p>\n<p>[\uadf8\ub9bc2] \uc21c\ud658 \ucc38\uc870 \uc608\uc2dc<\/p>\n<p>\n\ub9cc\uc57d \ubaa8\ub4c8\uac04\uc758 \ucc38\uc870\uac00 \ud544\uc694\ud55c \uacbd\uc6b0\ub294 \uacf5\ud1b5\uc73c\ub85c \ucc38\uc870\ud558\ub294 \ud074\ub798\uc2a4\ub97c \uc0c1\uc704 \ubaa8\ub4c8\ub85c \uc62e\uae38 \uc218 \uc788\ub2e4.<\/p>\n<h3>\ub2e4\uc774\ub098\ubbf9 \ud53c\uccd0 \ubaa8\ub4c8\uc744 \uc0ac\uc6a9\ud558\ub294 \ud504\ub85c\uc81d\ud2b8<\/h3>\n<p>\ub2e4\uc774\ub098\ubbf9 \ud53c\uccd0 \ubaa8\ub4c8\uc744 \uc0ac\uc6a9\ud558\uba74 \uc77c\ubc18\uc801\uc73c\ub85c \ubaa8\ub4c8\uac04\uc758 \uc758\uc874 \ubc29\ud5a5\uc774 \ubc18\uc804\ub41c\ub2e4. \ud558\uc704 \ubaa8\ub4c8\uc774 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ubaa8\ub4c8\uc744 \uc758\uc874\ud558\uba70, \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc740 \ud558\uc704 \ubaa8\ub4c8\uc744 \uc758\uc874\ud560 \uc218 \uc5c6\ub2e4. \uadf8\ub807\uae30 \ub54c\ubb38\uc5d0 Dagger\ub97c \uc0ac\uc6a9\ud55c \uc758\uc874\uc131 \uc8fc\uc785\uc2dc dagger.android \ud328\ud0a4\uc9c0\ub97c \uc774\uc6a9\ud55c \uadf8\ub798\ud504\ub97c \uad6c\uc131\ud558\ub294 \uac83\uc774 \ubd88\uac00\ub2a5\ud558\ub2e4. Dagger\ub294 \ud558\uc704 \ucef4\ud3ec\ub10c\ud2b8\ub97c \ucc38\uc870\ud560 \uc218 \uc788\uc5b4\uc57c \ucef4\ud30c\uc77c \ud0c0\uc784\uc5d0 \uadf8\ub798\ud504\ub97c \uad6c\uc131\ud560 \uc218 \uc788\uae30 \ub54c\ubb38\uc774\ub2e4.<\/p>\n<p><a href=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/01\/5-graph-dynamic-modules.png\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/01\/5-graph-dynamic-modules-1024x678.png\" alt=\"\" width=\"750\" height=\"497\" class=\"aligncenter size-large wp-image-43904\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/01\/5-graph-dynamic-modules-1024x678.png 1024w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/01\/5-graph-dynamic-modules-300x199.png 300w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/01\/5-graph-dynamic-modules-768x508.png 768w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/01\/5-graph-dynamic-modules-360x240.png 360w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/01\/5-graph-dynamic-modules.png 1689w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/a><\/p>\n<p>[\uadf8\ub9bc3]\ub2e4\uc774\ub098\ubbf9 \uba40\ud2f0 \ubaa8\ub4c8\uc744 \uc0ac\uc6a9\ud558\ub294 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c \ub300\uac70 \uadf8\ub798\ud504\uc758 \uc608\uc2dc<\/p>\n<p>Dagger\uc5d0\uc11c\ub294 \uc774 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\ub294\ub370 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 Component dependency\ub77c\ub294 \uba54\ucee4\ub2c8\uc998\uc744 \uc81c\uacf5\ud558\uace0 \uc788\ub2e4.\u00a0 \uc77c\ubc18\uc801\uc778 \ubaa8\ub4c8\uc744 \uc0ac\uc6a9\ud558\ub294 \ud504\ub85c\uc81d\ud2b8\uc640\ub294 \ub2e4\ub974\uac8c \ub2e4\uc774\ub098\ubbf9 \ud53c\uccd0\ubaa8\ub4c8\uc758 \ucef4\ud3ec\ub10c\ud2b8\uac00 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc758\uc874\ud558\ub294 \ud615\ud0dc\ub85c \uadf8\ub798\ud504\ub97c \ub9cc\ub4e4 \uc218 \uc788\ub2e4.\u00a0<\/p>\n<h2>\ub2e4\uc774\ub098\ubbf9 \ud53c\uccd0 \ubaa8\ub4c8 \ud504\ub85c\uc81d\ud2b8\uc5d0 Dagger \uc801\uc6a9\ud558\uae30<\/h2>\n<p>\uae30\uae30\uc758 \uc0ac\uc9c4\ub4e4\uc744 \uadf8\ub9ac\ub4dc \ubaa9\ub85d\uc73c\ub85c \ubcf4\uc5ec\uc8fc\ub294 \uac04\ub2e8\ud55c \ub2e4\uc774\ub098\ubbf9 \ud53c\uccd0 \ubaa8\ub4c8 \ud504\ub85c\uc81d\ud2b8 \uc608\uc81c\ub97c \uc0b4\ud3b4\ubcf4\uc790. \ub2e4\uc74c\uacfc \uac19\uc740 \ubaa8\ub4c8\ub4e4\ub85c \uad6c\uc131\ub41c\ub2e4.<\/p>\n<p><a href=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/01\/Dynamic-Feature-module.png\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/01\/Dynamic-Feature-module.png\" alt=\"\" width=\"471\" height=\"281\" class=\"aligncenter size-full wp-image-43920\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/01\/Dynamic-Feature-module.png 471w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/01\/Dynamic-Feature-module-300x179.png 300w\" sizes=\"(max-width: 471px) 100vw, 471px\" \/><\/a><\/p>\n<ul>\n<li>app \ubaa8\ub4c8 : \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ubaa8\ub4c8\ub85c, Base APK\uac00 \ub41c\ub2e4.<\/li>\n<li>photo \ubaa8\ub4c8 : \uc0ac\uc9c4 \ubaa9\ub85d\uc744 \ubcf4\uc5ec\uc8fc\ub294 PhotoActivity\ub97c \ud3ec\ud568\ud55c \ub3d9\uc801 \ubaa8\ub4c8<\/li>\n<li>core \ubaa8\ub4c8 : \ubaa8\ub4e0 \ubaa8\ub4c8\ub4e4\uc774 \uacf5\ud1b5\uc801\uc73c\ub85c \ucc38\uc870\ud558\ub294 \ud074\ub798\uc2a4\ub97c \ud3ec\ud568\ud558\ub294 \ubaa8\ub4c8<\/li>\n<\/ul>\n<p>Dagger \ucef4\ud3ec\ub10c\ud2b8 \ucf54\ub4dc\ub97c \uc0b4\ud3b4\ubcf4\uba74, \ud558\uc704 \ucef4\ud3ec\ub10c\ud2b8(PhotoComponent)\uac00 \uc0c1\uc704 \ucef4\ud3ec\ub10c\ud2b8(CoreComponent)\ub97c \uc758\uc874\ud558\uae30 \uc704\ud574 @Component\uc758 dependencies \uc560\ud2b8\ub9ac\ubdf0\ud2b8\ub97c \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n<p><strong>core\/CoreComponent.kt<\/strong><\/p>\n<pre class=\"lang: decode:true \">@Singleton\r\n@Component(modules = [CoreModule::class])\r\ninterface CoreComponent{\r\n\r\n    fun getApplication():Application \/\/ \ud558\uc704 \ucef4\ud3ec\ub10c\ud2b8\uac00 \ucc38\uc870\ud560 \uc218 \uc788\ub3c4\ub85d \ub178\ucd9c\r\n\r\n    @Component.Factory\r\n    interface Factory{\r\n        fun create(@BindsInstance application: Application):CoreComponent\r\n    }\r\n\r\n}<\/pre>\n<p><strong>photo\/PhotoComponent.kt<\/strong><\/p>\n<pre class=\"lang: decode:true \">@ActivityScope\r\n@Component(modules = [PhotoModule::class], dependencies =[CoreComponent::class] )\r\ninterface PhotoComponent{\/\/CoreComponent\uc5d0 \uc758\uc874\ud55c\ub2e4.\r\n\r\n    fun inject(photoActivity: PhotoActivity)\r\n\r\n    @Component.Factory\r\n    interface Factory {\r\n        fun create(coreComponent: CoreComponent,\r\n                   photoModule: PhotoModule,\r\n                   @BindsInstance photoActivity:PhotoActivity): PhotoComponent\r\n    }\r\n}<\/pre>\n<p>\uc704 \uc608\uc81c\ub294 <a href=\"https:\/\/github.com\/Charlezz\/MultiModuleSample\">github<\/a>\uc5d0\uc11c \ub2e4\uc6b4\ub85c\ub4dc \uac00\ub2a5\ud558\ub2e4.<\/p>\n<h3>TL; DR<\/h3>\n<p>\ub2e4\uc774\ub098\ubbf9 \ud53c\uccd0 \ubaa8\ub4c8\uc744 \uc0ac\uc6a9\ud558\uba74 \uc870\uc9c1\uc774\ub098 \ub2e4\ub978 \ud300\uac04\uc758 \ubcd1\ud569\ucda9\ub3cc \uc5c6\uc774 \uc791\uc5c5\ud558\uace0 \ucf54\ub4dc\uc758 \uc7ac\uc0ac\uc6a9 \ubc0f \ucea1\uc290\ud654\ub97c \ucd09\uc9c4\ud560 \uc218 \uc788\ub2e4. \ub610\ud55c \ube4c\ub4dc \uc2dc\uac04\uc774 \ud5a5\uc0c1\ub418\uba70, \ud544\uc694\ud55c \uae30\ub2a5\ub9cc\uc744 \uc0ac\uc6a9\uc790\uc5d0\uac8c \uc804\ub2ec\ud558\uc5ec APK \uc0ac\uc774\uc988\ub97c \ucd95\uc18c \ud560 \uc218 \uc788\ub2e4.\u00a0<\/p>\n<p>\ub2e4\uc774\ub098\ubbf9 \ud53c\uccd0 \ubaa8\ub4c8\uc740 \uc758\uc874\uc131 \ubc29\ud5a5\uc774 \uc5ed\uc804\ub418\uae30 \ub54c\ubb38\uc5d0, android.dagger \ud328\ud0a4\uc9c0\ub97c \uc0ac\uc6a9\ud558\ub294\ub370 \uc5b4\ub824\uc6c0\uc774 \uc788\ub2e4. \uc774\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud574 \uc9c1\uc811 Component Dependency \uba54\ucee4\ub2c8\uc998\uc744 \ud65c\uc6a9\ud558\uace0 \ucef4\ud3ec\ub10c\ud2b8\uac04\uc758 \uc758\uc874\uc131\uc744 \uc9c1\uc811 \uc124\uc815\ud558\uc790.<\/p>\n<p>&nbsp;<\/p>\n<p><iframe loading=\"lazy\" width=\"480\" height=\"353\" src=\"https:\/\/giphy.com\/embed\/dSetNZo2AJfptAk9hp\" frameborder=\"0\" class=\"giphy-embed\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\uba40\ud2f0 \ubaa8\ub4c8\uc744 \uc0ac\uc6a9\ud558\ub294 \uc571\uc5d0\uc11c Dagger \uc801\uc6a9\ud558\uae30 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uac1c\ubc1c\uc2dc \ub2e4\uc74c\uacfc \uac19\uc740 \ud2b9\uc218\ud55c \ubaa9\uc801\uc73c\ub85c \uac00\uc9c0\uace0 \uba40\ud2f0 \ubaa8\ub4c8\uc744 \uc0ac\uc6a9\ud55c \uac1c\ubc1c \ubc29\ubc95\uc744 \ud0dd\ud560 \uc218 \uc788\ub2e4. \ub300\uaddc\ubaa8 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c\uc758 \uac1c\ubc1c\uc790\uac04 \ud611\uc5c5 \ube4c\ub4dc \uc2dc\uac04 \ub2e8\ucd95 \ubaa8\ub4c8\uc758 \uc7ac\uc0ac\uc6a9 \uc5ec\ub7ec\uac00\uc9c0 \ubc84\uc804\uc758 \uc571\uc744 \ub9cc\ub4e4 \ub54c APK \uc6a9\ub7c9\uc744 \uc904\uc77c \ub54c ( Dynamic Feature Module) \uc548\ub4dc\ub85c\uc774\ub4dc \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c \uba40\ud2f0 \ubaa8\ub4c8\uc758 \uc885\ub958\ub294 \uc77c\ubc18\uc801\uc778 \ubaa8\ub4c8\uacfc [&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,5],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/43901"}],"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=43901"}],"version-history":[{"count":13,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/43901\/revisions"}],"predecessor-version":[{"id":43923,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/43901\/revisions\/43923"}],"wp:attachment":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=43901"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=43901"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=43901"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}