{"id":1259,"date":"2019-05-27T23:28:14","date_gmt":"2019-05-27T14:28:14","guid":{"rendered":"https:\/\/www.charlezz.com\/?p=1259"},"modified":"2021-05-11T12:29:54","modified_gmt":"2021-05-11T03:29:54","slug":"dagger2%eb%a5%bc-%ec%95%8c%ec%95%84%eb%b3%b4%ec%9e%90-%ea%b8%b0%eb%b3%b8%ed%8e%b8","status":"publish","type":"post","link":"https:\/\/charlezz.com\/?p=1259","title":{"rendered":"Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; \uae30\ubcf8\ud3b8"},"content":{"rendered":"<p>Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; \uae30\ubcf8\ud3b8\u00a0(You&#8217;re here)<br \/>\n<a href=\"https:\/\/www.charlezz.com\/?p=1289\">Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; Scope<\/a>\u00a0<br \/>\n<a href=\"https:\/\/www.charlezz.com\/?p=1297\">Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; Injection\uc758 \uc885\ub958<\/a><br \/>\n<a href=\"https:\/\/www.charlezz.com\/?p=1299\">Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; Qualifier<\/a><br \/>\n<a href=\"https:\/\/www.charlezz.com\/?p=1313\">Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; Binding<\/a><br \/>\n<a href=\"https:\/\/www.charlezz.com\/?p=1315\">Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; Multibinding<\/a><br \/>\n<a href=\"https:\/\/www.charlezz.com\/?p=1336\">Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; SubComponent<\/a><br \/>\n<a href=\"https:\/\/www.charlezz.com\/?p=1357\">Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; Android<\/a><br \/>\nDagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; Testing(\uc900\ube44\uc911)<br \/>\n<a href=\"https:\/\/www.charlezz.com\/?p=45066\">Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; Dynamic Feature\uc5d0 \uc801\uc6a9\ud558\uae30<\/a><\/p>\n<hr \/>\n<h1>Dagger2\ub780 \ubb34\uc5c7\uc77c\uae4c\uc694?<\/h1>\n<p><span>Dagger\ub294\u00a0\uc790\ubc14\uc640 Android\ub97c \uc704\ud574\u00a0\uc644\uc804\ud788 \uc815\uc801\uc73c\ub85c \ucef4\ud30c\uc77c \ud0c0\uc784\u00a0<\/span><a href=\"http:\/\/en.wikipedia.org\/wiki\/Dependency_injection\"><span>\uc758\uc874\uc131 \uc8fc\uc785<\/span><\/a><span>\u00a0\ud504\ub808\uc784 \uc6cc\ud06c\uc785\ub2c8\ub2e4.\u00a0<\/span><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media.giphy.com\/media\/JE5PtgQdM7BGo\/giphy.gif\" \/><\/p>\n<h2>\uc758\uc874\uc131 \uc8fc\uc785(Dependency-injection)\uc774\ub780?<\/h2>\n<p><span>\uc758\uc874\uc131 \uc8fc\uc785\uc740 \ud504\ub85c\uadf8\ub798\ubc0d\uc5d0\uc11c \uad6c\uc131\uc694\uc18c\uac04\uc758 \uc758\uc874 \uad00\uacc4\uac00 \ub0b4\ubd80\uac00 \uc544\ub2cc \uc678\ubd80\ub97c \ud1b5\ud574 \uc815\uc758\ub418\uac8c \ud558\ub294\u00a0\ub514\uc790\uc778 \ud328\ud134\u00a0\uc911\uc758 \ud558\ub098\uc785\ub2c8\ub2e4. \uc758\uc874\uc131 \uc8fc\uc785\uc758 \ubaa9\uc801\uc740 \uac1d\uccb4\ub97c \uc0dd\uc131\ud558\uace0 \uc0ac\uc6a9\ud558\ub294 \uad00\uc2ec\uc0ac\ub97c \ubd84\ub9ac\ud558\ub294 \uac83\uc785\ub2c8\ub2e4.<\/span><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" width=\"586\" height=\"551\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2019\/05\/drawit-diagram-2.png\" class=\"aligncenter wp-image-1262\" alt=\"\" title=\"drawit diagram\" srcset=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2019\/05\/drawit-diagram-2.png 586w, https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2019\/05\/drawit-diagram-2-300x282.png 300w\" sizes=\"(max-width: 586px) 100vw, 586px\" \/><\/p>\n<p>\uc704\uc758 \uadf8\ub9bc\uc744 \uc0b4\ud3b4\ubcf4\uba74 \uccab\ubc88\uc9f8 \uadf8\ub9bc\uc740 A\ub0b4\uc5d0\uc11c B\ub97c \uc0dd\uc131\ud558\uc9c0\ub9cc, \ub450\ubc88\uc9f8 \uadf8\ub9bc\uc740 \uc678\ubd80\uc5d0\uc11c B\uac1d\uccb4\uac00 \uc0dd\uc131\ub418\uc5b4 A\ub85c \uc8fc\uc785\ub418\ub294 \ubaa8\uc2b5\uc785\ub2c8\ub2e4.<\/p>\n<p>\uc774\ub54c \uc678\ubd80\uc5d0\uc11c \uac1d\uccb4\ub97c \uad00\ub9ac\ud558\uac8c \ub418\ub294\ub370 \uc774\ub97c<strong> IOC(inversion of Control, \uc81c\uc5b4\uc758 \uc5ed\uc804)<\/strong>\ub77c \ud569\ub2c8\ub2e4.\u00a0<\/p>\n<p><strong><em>Note : IOC\ub294 \uac1d\uccb4\uc758 \uc0dd\uc131\ubd80\ud130 \uc0dd\uba85\uc8fc\uae30 \uad00\ub9ac\uae4c\uc9c0 \ucee8\ud14c\uc774\ub108\uc5d0 \uc758\ud574 \uc81c\uc5b4 \ub418\ub294 \uac83\uc744 \uc758\ubbf8\ud558\uace0, \uc758\uc874\uc131 \uc8fc\uc785(DI)\uc740 \uac1d\uccb4\uac04\uc758 \uc758\uc874\uc131\uc744 \uc790\uae30 \uc790\uc2e0\uc774 \uc544\ub2cc \uc678\ubd80\uc5d0\uc11c \uc8fc\uc785\ubc1b\ub294 \uac1c\ub150\uc785\ub2c8\ub2e4.<\/p>\n<p>\n<\/em><\/strong><\/p>\n<p>&nbsp;<\/p>\n<h2>\uc758\uc874\uc131\uc8fc\uc785\uc740 \uc65c \ud544\uc694\ud560\uae4c?<\/h2>\n<p>\uc758\uc874\uc131 \uc8fc\uc785\uc740 \ub2e4\uc74c\uacfc \uac19\uc740 \uc7a5\uc810\uc744 \uac16\uae30 \ub54c\ubb38\uc5d0 \ud544\uc694\ud569\ub2c8\ub2e4.<\/p>\n<ul>\n<li class=\"p1\">\ucf54\ub4dc\uac00<span class=\"s1\"> <\/span>\uc720\uc5f0\ud574\uc9d0<span class=\"s1\">, <\/span>\ud074\ub798\uc2a4\uac04\uc758<span class=\"s1\"> <\/span>\uacb0\ud569\ub3c4\ub97c<span class=\"s1\"> <\/span>\uc904\uc784<span class=\"s1\">.<\/span><\/li>\n<li>\ub9ac\ud329\ud1a0\ub9c1\uc774<span class=\"s1\"> <\/span>\uc218\uc6d4\ud568<\/li>\n<li>\uc720\ub2db\ud14c\uc2a4\ud2b8\ub97c<span class=\"s1\"> <\/span>\ub354<span class=\"s1\"> <\/span>\uc27d\uac8c<span class=\"s1\"> <\/span>\uc218\ud589<span class=\"s1\"> <\/span>\ud560<span class=\"s1\"> <\/span>\uc218<span class=\"s1\"> <\/span>\uc788\uc74c<\/li>\n<li>\ucf54\ub4dc\uc758<span class=\"s1\"> <\/span>\uc7ac\uc0ac\uc6a9\uc131<span class=\"s1\">\u00a0<\/span>\uc99d\ub300<\/li>\n<li>\ubcf4\uc77c\ub7ec \ud50c\ub808\uc774\ud2b8 \ucf54\ub4dc \uac10\uc18c<\/li>\n<li>\uc2a4\ucf54\ud504\ub97c \uc774\uc6a9\ud55c \uac1d\uccb4 \uad00\ub9ac<\/li>\n<\/ul>\n<p>\ubc18\uba74 \ub2e8\uc810\ub3c4 \uc788\ub294\ub370, \uc758\uc874\uc131 \uc8fc\uc785\uc744 \uc704\ud55c \uc120\ud589\uc791\uc5c5\uc774 \ud544\uc694\ud558\uace0 \ucf54\ub4dc\ub97c \ucd94\uc801\ud558\uace0 \uc77d\uae30\uac00 \uc5b4\ub824\uc6cc\uc9d1\ub2c8\ub2e4.<\/p>\n<p><del>\uc7a5\uc810\uc774 \ub354 \ud06c\uae30 \ub54c\ubb38\uc5d0 \ub2e8\uc810\uc740 \ubb34\uc2dc\ud574\ubc84\ub9bd\uc2dc\ub2e4!<\/del><\/p>\n<h2>Dagger2 \uc124\uc815\ud558\uae30<\/h2>\n<p>Dagger2 \uc124\uc815\uc740 \uacf5\uc2dd github\uc5d0\uc11c \ud655\uc778\ud558\uc2dc\uae30\ubc14\ub78d\ub2c8\ub2e4.<\/p>\n<p>\ub9c1\ud06c:<a href=\"https:\/\/github.com\/google\/dagger\">https:\/\/github.com\/google\/dagger<\/a><\/p>\n<h2>Dagger2 \uc0ac\uc6a9\ud558\uae30<\/h2>\n<p>Dagger2\ub294 \ub9ac\ud50c\ub809\uc158\uc744 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uace0 \ucef4\ud30c\uc77c \ud0c0\uc784\uc5d0 \ucf54\ub4dc\ub97c \uc0dd\uc131\ud574\ub0b4\uae30 \ub54c\ubb38\uc5d0 \ube60\ub985\ub2c8\ub2e4. \ucef4\ud30c\uc77c \ud0c0\uc784\uc5d0 \ucf54\ub4dc\ub97c \uc0dd\uc131\ud560 \uc218 \uc788\ub294 \uc774\uc720\ub294 \uc790\ubc14\uc758 Annotation Processing \ub355\ubd84\uc778\ub370\uc694. Dagger2\uc5d0\uc11c \uc8fc\ub85c \uc0ac\uc6a9\ud558\ub294 Annotation\uc5d0 \ub300\ud574\uc11c \uba3c\uc800 \uc124\uba85\ud574\ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<p><strong><em>Note :\u00a0 \uc790\ubc14\uc758 Annotation\uc5d0 \ub300\ud574\uc11c \ub354 \uc790\uc138\ud788 \uc54c\uace0 \uc2f6\ub2e4\uba74 <a href=\"https:\/\/www.charlezz.com\/?p=1167\">Annotation Processor\uc5d0 \ub300\ud55c \ud3ec\uc2a4\ud2b8<\/a>\ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694.<\/em><\/strong><\/p>\n<h3>@Module \uacfc @Provide<\/h3>\n<p>@Module\uc740\u00a0<strong>\ud074\ub798\uc2a4<\/strong>\uc5d0\ub9cc \ubd99\uc774\uba70 @Provide\ub294 \ubc18\ub4dc\uc2dc @Module\ud074\ub798\uc2a4\uc548\uc5d0 \uc120\uc5b8\ub41c\u00a0<strong>\uba54\uc18c\ub4dc<\/strong>\uc5d0\ub9cc \ubd99\uc785\ub2c8\ub2e4.<\/p>\n<p>Module\ud074\ub798\uc2a4\ub294 \uc758\uc874\uc131 \uc8fc\uc785\uc5d0 \ud544\uc694\ud55c \uac1d\uccb4\ub4e4\uc744 Provide\uba54\uc18c\ub4dc\ub97c \ud1b5\ud574 \uad00\ub9ac \ud569\ub2c8\ub2e4. Provide \uba54\uc18c\ub4dc\uc758 \ud30c\ub77c\ubbf8\ud130 \ub610\ud55c \ucef4\ud3ec\ub10c\ud2b8 \uad6c\ud604\uccb4\ub85c\ubd80\ud130 \uc804\ub2ec \ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc77c\ubc18\uc801\uc73c\ub85c Module\ud074\ub798\uc2a4\ub294 \ud074\ub798\uc2a4\uc774\ub984 \ub4a4\uc5d0 Module\uc744 \ubd99\uc774\uace0, Provide\uba54\uc18c\ub4dc\uba85 \uc55e\uc5d0\ub294 provide\ub97c \ubd99\uc774\ub294 \uac83\uc774 \uc77c\ubc18\uc801\uc778 \ucee8\ubca4\uc158\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:java decode:true\">@Module\r\npublic class AModule {\r\n    @Provides\r\n    AA provideAA(){ \/\/AA \uc624\ube0c\uc81d\ud2b8\ub97c \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uac8c \uc81c\uacf5\r\n        return new AA();\r\n    }\r\n\r\n    @Provides\r\n    BB provideBB(AA aa){ \/\/\uc704\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 AA\ub97c \ucef4\ud3ec\ub10c\ud2b8\ub85c \ubd80\ud130 \uc778\uc790\ub85c \uc804\ub2ec\ubc1b\uc544 BB\ub97c \uc81c\uacf5\r\n        return new BB(aa);\r\n    }\r\n}<\/pre>\n<pre class=\"lang:java decode:true \">@Module\r\npublic class BModule {\r\n    @Provides\r\n    String provideName(){\r\n        return \"Charles\";\r\n    }\r\n}\r\n<\/pre>\n<p><strong><em>Note : Dagger\uc5d0\uc11c\ub294 \uae30\ubcf8\uc801\uc73c\ub85c null\uc744 \uc778\uc81d\uc158\ud558\ub294 \uac83\uc744 \uae08\uc9c0 \ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. null\uc744 \uc778\uc81d\uc158 \ud558\uace0 \uc2f6\ub2e4\uba74 @Nullable \uc560\ub178\ud14c\uc774\uc158\uc744 \uc774\uc6a9\ud574\uc57c\ud569\ub2c8\ub2e4. @Provide \uba54\uc18c\ub4dc\uc640 \uac1d\uccb4\ub97c \uc8fc\uc785\ubc1b\uc744 \ud0c0\uc785\uc774 \ubaa8\ub450 \uc30d\uc73c\ub85c@Nullable \uc560\ub178\ud14c\uc774\uc158\uc774 \ubd99\uc5b4 \uc788\ub294 \uacbd\uc6b0\uc5d0\ub9cc null \uc8fc\uc785\uc744 \ud5c8\uc6a9\ud558\uba70, \uadf8 \uc774\uc678\uc758 \uacbd\uc6b0\uc5d0\ub294 \ucef4\ud30c\uc77c \ud0c0\uc784\uc5d0 \uc5d0\ub7ec\ub97c \ubc1c\uc0dd \uc2dc\ud0b5\ub2c8\ub2e4.<\/em><\/strong><\/p>\n<h3 class=\"p1\">@Inject<\/h3>\n<p>@Inject\ub294 \ud544\ub4dc, \uc0dd\uc131\uc790, \uba54\uc18c\ub4dc\uc5d0 \ubd99\uc5ec\u00a0 \ucef4\ud3ec\ub10c\ud2b8\ub85c\ubd80\ud130 \uac1d\uccb4\ub97c \uc8fc\uc785\ubc1b\uc744 \uc218 \uc788\uac8c \ud569\ub2c8\ub2e4. \uac1d\uccb4\ub97c \uc8fc\uc785\ubc1b\uae30 \ub54c\ubb38\uc5d0 \uac1d\uccb4\uc758 \uc0dd\uc131\uc774 \ud074\ub798\uc2a4\uc5d0 \uc758\uc874\uc801\uc774\uc9c0 \uc54a\uace0 \ubcf4\uc77c\ub7ec\ud50c\ub808\uc774\ud2b8\ucf54\ub4dc\ub97c \uc791\uc131\ud560 \ud544\uc694\uc5c6\uc774 \ud074\ub798\uc2a4\ub97c \ud14c\uc2a4\ud2b8\ud558\uae30\uac00 \uc218\uc6d4\ud574 \uc9d1\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:java decode:true \">public class AA {\r\n}\r\n\r\npublic class BB {\r\n    public BB(AA aa){\r\n    }\r\n}\r\n\r\npublic class CC {\r\n    AA aa;\r\n    BB bb;\r\n    @Inject\r\n    public CC(AA aa, BB bb){\/\/\uc0dd\uc131\uc790\uc5d0 \uc8fc\uc785\ud558\ub294 \uc608\uc81c\r\n        this.aa = aa;\r\n        this.bb = bb;\r\n    }\r\n}\r\n<\/pre>\n<pre class=\"lang:java decode:true\">public class Main{ \/\/\ud544\ub4dc\uc5d0 \uc8fc\uc785\ud558\ub294 \uc608\uc81c\r\n    @Inject AA aa; \r\n    @Inject BB bb; \r\n    @Inject CC cc;\r\n    ...\r\n}<\/pre>\n<p>\uae30\ubcf8\uc801\uc73c\ub85c Dagger\ub294 \uc694\uccad\ub41c \uc790\ub8cc\ud615\uc5d0 \ub9de\uac8c Module\ub85c\ubd80\ud130 \uc778\uc2a4\ud134\uc2a4\ub97c \uc0dd\uc131\ud558\uc5ec \uc8fc\uc785\uc744 \ubc1b\uac8c \ub429\ub2c8\ub2e4. \ubaa8\ub4e0\uacf3\uc5d0\uc11c @Inject\uac00 \ub3d9\uc791\ud558\ub294\uac83\uc740 \uc544\ub2d9\ub2c8\ub2e4. @Inject\ub97c \ubd99\uc77c \uc218 \uc5c6\ub294 \uacbd\uc6b0\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<ul>\n<li>\uc778\ud130\ud398\uc774\uc2a4\ub294 \uc0dd\uc131\uc790\uac00 \uc5c6\uc73c\ubbc0\ub85c \ubd88\uac00\ub2a5<\/li>\n<li>\uc368\ub4dc\ud30c\ud2f0 \ub77c\uc774\ube0c\ub7ec\ub9ac \ub4f1\uc758 \ud074\ub798\uc2a4\ub294 \ucc38\uc870\uac00 \ubd88\uac00\ub2a5\ud558\uc5ec \uc560\ub178\ud14c\uc774\uc158\ud504\ub85c\uc138\uc2f1\uc774 \uc548\ub428<\/li>\n<li>\uae30\ud0c0 \ub4f1\ub4f1<\/li>\n<\/ul>\n<h3 class=\"p1\">@Component<\/h3>\n<p>@Component\ub294 interface \ub610\ub294 abstract \ud074\ub798\uc2a4\uc5d0 \ubd99\uc77c\uc218 \uc788\uc2b5\ub2c8\ub2e4. \ucef4\ud30c\uc77c \ud0c0\uc784\uc5d0 \uc560\ub178\ud14c\uc774\uc158 \ud504\ub85c\uc138\uc11c\uc5d0 \uc758\ud574 \uc0dd\uc131\ub41c \ud074\ub798\uc2a4\ub294 \uc811\ub450\uc5b4 &#8216;Dagger&#8217;\uc640 @Component\uac00 \ubd99\uc740 \ud074\ub798\uc2a4\uc774\ub984\uc774 \ud569\uccd0\uc9c4 \ud615\uc2dd\uc758 \uc774\ub984\uc744 \uac16\uc2b5\ub2c8\ub2e4. \uc608\ub97c\ub4e4\uba74 @Component interface MyComponent{&#8230;}\ub780 \uc778\ud130\ud398\uc774\uc2a4\uac00 \uc788\ub2e4\uba74 DaggerMyComponent\ub77c\ub294 \ud074\ub798\uc2a4\uac00 \uc0dd\uc131\ub418\uac8c \ub429\ub2c8\ub2e4.<\/p>\n<h4>Component methods<\/h4>\n<p>@Component \uc560\ub178\ud14c\uc774\uc158\uc774 \ub2ec\ub9b0 interface \ub610\ub294 abstract \ud074\ub798\uc2a4\uc5d0\ub294 \uc801\uc5b4\ub3c4 \ud558\ub098\uc758 \ucd94\uc0c1 \ucef4\ud3ec\ub10c\ud2b8 \uba54\uc18c\ub4dc\uac00 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4. \ucef4\ud3ec\ub10c\ud2b8 \uba54\uc18c\ub4dc\uc5d0\ub294 <strong>Provision \uba54\uc18c\ub4dc<\/strong>\uc640 <strong>Member-Injection \uba54\uc18c\ub4dc<\/strong>\uac00 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:java decode:true\">@Component(modules = {AModule.class, BModule.class})\r\npublic interface MyComponent {\r\n    \/\/provision \uba54\uc18c\ub4dc\r\n    AA makeAA();\r\n\r\n    \/\/member-injection \uba54\uc18c\ub4dc\r\n    void inject(Main target);\r\n\r\n}\r\n<\/pre>\n<h5>Provision Method<\/h5>\n<p>\ud504\ub85c\ube44\uc804 \uba54\uc18c\ub4dc\uc5d0\ub294 <strong>\ub9e4\uac1c\ubcc0\uc218\uac00 \uc5c6\uace0<\/strong>, \ubaa8\ub4c8\uc774 \uc81c\uacf5\ud558\ub294 <strong>\uac1d\uccb4\uc758 \ud0c0\uc785<\/strong>\uc744 \ubc18\ud658\ud615\uc73c\ub85c \uac16\uc2b5\ub2c8\ub2e4. \uc0dd\uc131\ub41c \ucef4\ud3ec\ub10c\ud2b8 \ud074\ub798\uc2a4\uc5d0\uc11c \uc774 \uba54\uc18c\ub4dc\ub97c \uc774\uc6a9\ud558\uc5ec \uac1d\uccb4\ub97c \uc5bb\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h5>Member-Injection Method<\/h5>\n<p>\uc758\uc874\uc131\uc744 \uc8fc\uc785\uc2dc\ud0ac \uac1d\uccb4\ub97c \uba54\uc18c\ub4dc\uc758 \ud30c\ub77c\ubbf8\ud130\ub85c \ub118\uae30\ub294 \ubc29\ubc95\uc785\ub2c8\ub2e4. \uba64\ubc84\uc778\uc81d\uc158 \uba54\uc18c\ub4dc\ub97c \ud638\ucd9c \ud558\uac8c \ub418\uba74 \ud0c0\uac9f \ud074\ub798\uc2a4 \ub0b4\uc758 @Inject \ud544\ub4dc\uc5d0 \uac1d\uccb4\ub97c \uc8fc\uc785\ubc1b\uac8c \ub429\ub2c8\ub2e4.<\/p>\n<h4>@Component.Builder<\/h4>\n<p>\ucef4\ud3ec\ub10c\ud2b8\ub97c \uc0dd\uc131\ud558\uae30 \uc704\ud55c Builder\uc6a9 \uc560\ub178\ud14c\uc774\uc158\uc785\ub2c8\ub2e4. Component \ub0b4\uc758 abstract \ud074\ub798\uc2a4 \ub610\ub294 interface\uc5d0 \uc774 \uc560\ub178\ud14c\uc774\uc158\uc744 \ubd99\uc785\ub2c8\ub2e4. \ub2e4\uc74c\uacfc \uac19\uc774 Builder\ub97c \uc815\uc758 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:java decode:true\">@Component(modules = AModule.class)\r\npublic interface MyComponent {\r\n    @Component.Builder\r\n    interface Builder{\r\n        MyComponent build();  \r\n        Builder aModule(AModule module);\r\n    }\r\n}<\/pre>\n<p>Builder\ub294 \ubc18\ub4dc\uc2dc Component\ub97c \ubc18\ud658\ud558\ub294 \uba54\uc18c\ub4dc\uc640 Builder\ub97c \ubc18\ud658\ud558\uba74\uc11c \ucef4\ud3ec\ub10c\ud2b8\uac00 \ud544\uc694\ub85c \ud558\ub294 \ubaa8\ub4c8\uc744 \ud30c\ub77c\ubbf8\ud130\ub85c \ubc1b\ub294 \uba54\uc18c\ub4dc\ub97c \uac00\uc9c0\uace0 \uc788\uc5b4\uc57c\ud569\ub2c8\ub2e4. \uc774 \uc870\uac74\uc744 \ucda9\uc871\ud558\uc9c0 \ubabb\ud558\uba74 \ucef4\ud30c\uc77c \ud0c0\uc784\uc5d0 \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud569\ub2c8\ub2e4.<\/p>\n<p>@Component.Builder \uc560\ub178\ud14c\uc774\uc158\uc744 \uc9c0\uc815\ud558\uc9c0 \uc54a\uc73c\uba74 \uc554\uc2dc\uc801\uc73c\ub85c Builder\uac00 \uc0dd\uc131\ub429\ub2c8\ub2e4.<\/p>\n<p><em><strong>Note:\u00a0@Component.Builder \uc560\ub178\ud14c\uc774\uc158\uc744 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc73c\uba74, \uc0dd\uc131\ub418\ub294 DaggerMyComponent\uc5d0\uc11c \ub2e4\uc74c\uacfc \uac19\uc740 \ucf54\ub4dc\uac00 \ud3ec\ud568\ub418\ub294\uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/strong><\/em><\/p>\n<pre class=\"lang:java decode:true  \">public final class DaggerMyComponent implements MyComponent {\r\n    ...\r\n\r\n    public static Builder builder() {\r\n        return new Builder();\r\n    }\r\n\r\n    public static MyComponent create() {\r\n        return new Builder().build();\r\n    }\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<h2>Dagger\uc758 Graph<\/h2>\n<p><img decoding=\"async\" loading=\"lazy\" width=\"742\" height=\"481\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2019\/05\/DI-Graph.png\" class=\"aligncenter wp-image-1287\" alt=\"\" title=\"DI Graph\" srcset=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2019\/05\/DI-Graph.png 742w, https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2019\/05\/DI-Graph-300x194.png 300w\" sizes=\"(max-width: 742px) 100vw, 742px\" \/><\/p>\n<p>\uc774\uc81c Dagger\ub97c \ud1b5\ud55c DI\ub97c \uad6c\ud604\ud558\uae30 \uc704\ud55c \uae30\ubcf8\uc801\uc778 \uc900\ube44\ub294 \ub05d\ub0ac\uc2b5\ub2c8\ub2e4. \uc758\uc874\uc131 \uc8fc\uc785 \uc694\uccad\uc2dc, \ubaa8\ub4c8\ub85c\ubd80\ud130 \uc0dd\uc131\ub41c \uac1d\uccb4\ub97c \ucef4\ud3ec\ub10c\ud2b8\ub97c \ud1b5\ud574 \uc8fc\uc785\ubc1b\uc2b5\ub2c8\ub2e4. \uc704\uc758 \uadf8\ub9bc\uc744 \ubcf4\uba74 \uc870\uae08 \ub354 \uc774\ud574\uac00 \uc26c\uc6b8 \uac83\uc785\ub2c8\ub2e4. \uc704\uc640 \uac19\uc774 \ubaa8\ub4c8\uacfc \ucef4\ud3ec\ub10c\ud2b8 \uadf8\ub9ac\uace0 \uc758\uc874\uc131 \uc8fc\uc785\ubc1b\ub294 \ub300\uc0c1\uad00\uc758 \uacc4\uc57d\uad00\uacc4\ub97c Dagger\uc5d0\uc11c\ub294 <strong>\uadf8\ub798\ud504<\/strong>\ub77c\uace0 \ud569\ub2c8\ub2e4.<\/p>\n<p>\uc774\uc81c \uc2e4\uc81c\ub85c \ucef4\ud3ec\ub10c\ud2b8\ub97c \ud1b5\ud574 \uc758\uc874\uc131 \uc8fc\uc785\uc744 \uc2e4\ud589\ud574\ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:java decode:true \">public class Main{ \/\/\ud544\ub4dc\uc5d0 \uc8fc\uc785\ud558\ub294 \uc608\uc81c\r\n    @Inject AA aa;\r\n    @Inject BB bb;\r\n    @Inject CC cc;\r\n\r\n    public Main(){\r\n        DaggerMyComponent.create().inject(this);\r\n    }\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<h1>TL;DR<\/h1>\n<p>\ub2e4\uc2dc \ud55c\ubc88 DI\uc758 \uc7a5\uc810\uc744 \uc815\ub9ac\ud558\uc790\uba74,<\/p>\n<p>\uad00\uc2ec\uc0ac\ub97c \ubd84\ub9ac\ud588\uc73c\ubbc0\ub85c \uac1d\uccb4\ub97c \uc0dd\uc131\ud558\ub294 \ubd80\ubd84\uacfc \uc544\ub2cc \ubd80\ubd84\uc774 \ub098\ub258\uc5b4\uc84c\uc73c\uba70,<strong> \ub9ac\ud329\ud1a0\ub9c1<\/strong> \ubc0f <strong>\uc720\ub2db\ud14c\uc2a4\ud2b8<\/strong>\uac00 \uac00\ub2a5\ud574\uc9d1\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uba74 AA, BB, CC\uc5d0 \uc804\ud600 \ub2e4\ub978 \uac1d\uccb4\ub97c \uc8fc\uc785\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0 \uac1d\uccb4\ub97c \uc0dd\uc131\ud558\ub294 \ubaa8\ub4c8\ub9cc \ubcc0\uacbd\ud574\uc8fc\uba74 \ub429\ub2c8\ub2e4.\u00a0<\/p>\n<p>\ubaa8\ub4c8 \ucf54\ub4dc\ub97c <strong>\uc7ac\uc0ac\uc6a9<\/strong>\ud560 \uc218 \uc788\uc73c\ub2c8 <strong>\ubcf4\uc77c\ub7ec \ud50c\ub808\uc774\ud2b8 \ucf54\ub4dc<\/strong>\ub3c4 \uc904\uc5b4\ub4ed\ub2c8\ub2e4.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media.giphy.com\/media\/Wsju5zAb5kcOfxJV9i\/giphy.gif\" \/><\/p>\n<p>\uc704 \uc608\uc81c\ub294 <a href=\"https:\/\/github.com\/charlezz\/daggersample\">github<\/a>\uc5d0\uc11c \ud655\uc778\uac00\ub2a5\ud569\ub2c8\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; \uae30\ubcf8\ud3b8\u00a0(You&#8217;re here) Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; Scope\u00a0 Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; Injection\uc758 \uc885\ub958 Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; Qualifier Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; Binding Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; Multibinding Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; SubComponent Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; Android Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; Testing(\uc900\ube44\uc911) Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; Dynamic Feature\uc5d0 \uc801\uc6a9\ud558\uae30 Dagger2\ub780 \ubb34\uc5c7\uc77c\uae4c\uc694? Dagger\ub294\u00a0\uc790\ubc14\uc640 Android\ub97c \uc704\ud574\u00a0\uc644\uc804\ud788 \uc815\uc801\uc73c\ub85c [&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,25],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/1259"}],"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=1259"}],"version-history":[{"count":25,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/1259\/revisions"}],"predecessor-version":[{"id":45070,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/1259\/revisions\/45070"}],"wp:attachment":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1259"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1259"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1259"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}