{"id":1357,"date":"2019-07-23T22:53:15","date_gmt":"2019-07-23T13:53:15","guid":{"rendered":"https:\/\/www.charlezz.com\/?p=1357"},"modified":"2021-05-11T12:32:09","modified_gmt":"2021-05-11T03:32:09","slug":"dagger2%eb%a5%bc-%ec%95%8c%ec%95%84%eb%b3%b4%ec%9e%90-android","status":"publish","type":"post","link":"https:\/\/charlezz.com\/?p=1357","title":{"rendered":"Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; Android"},"content":{"rendered":"<p><a href=\"https:\/\/www.charlezz.com\/?p=1259\">Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; \uae30\ubcf8\ud3b8<\/a><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>\u00a0<br \/>\n<a href=\"https:\/\/www.charlezz.com\/?p=1299\">Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; Qualifier<\/a>\u00a0<br \/>\n<a href=\"https:\/\/www.charlezz.com\/?p=1313\">Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; Binding<\/a>\u00a0<br \/>\n<a href=\"https:\/\/www.charlezz.com\/?p=1315\">Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; Multibinding<\/a>\u00a0<br \/>\n<a href=\"https:\/\/www.charlezz.com\/?p=1336\">Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; SubComponent<\/a>\u00a0<br \/>\nDagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; Android\u00a0(You&#8217;re here)<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<p><span>\ub300\ubd80\ubd84\uc758 \ub2e4\ub978 \uc758\uc874\uc131 \uc8fc\uc785 \ud504\ub808\uc784 \uc6cc\ud06c\uc5d0 \ube44\ud574 Android\ub97c \uc704\ud55c Dagger\uc758 \uc8fc\uc694 \uc7a5\uc810 \uc911 \ud558\ub098\ub294 <a href=\"https:\/\/www.charlezz.com\/?p=756\"><strong>\ub9ac\ud50c\ub809\uc158<\/strong><\/a> \uc5c6\uc774 <a href=\"https:\/\/www.charlezz.com\/?p=1167\"><strong>\uc560\ub178\ud14c\uc774\uc158 \ud504\ub85c\uc138\uc2f1<\/strong><\/a>\uc744 \uc774\uc6a9\ud558\uc5ec \uc790\ubc14\uc18c\uc2a4\ub97c \uc0dd\uc131\ud55c\ub2e4\ub294 \uac83\uc785\ub2c8\ub2e4.\u00a0<\/span><\/p>\n<p>\uc548\ub4dc\ub85c\uc774\ub4dc\uc6a9 Dagger\ub294 \ub2e4\ub978 \uc560\ub178\ud14c\uc774\uc158\uc744 \uc4f0\uae30 \ub54c\ubb38\uc5d0 \uc55e\uc11c \ub2e4\ub8e8\uc5c8\ub358 \ubc29\ubc95\uacfc\ub294 \uc870\uae08 \ub2e4\ub974\ub098 \uae30\ubcf8\uc801\uc778 \uc6d0\ub9ac\ub294 \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<p>Dagger\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc548\ub4dc\ub85c\uc774\ub4dc \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ucf54\ub4dc\ub97c \uc791\uc131\ud558\ub294\uac83\uc5d0 \ub300\ud55c \uac00\uc7a5 \ud070 \uc5b4\ub824\uc6c0\uc740 \uc561\ud2f0\ube44\ud2f0\uc758 \uc778\uc2a4\ud134\uc2a4\ub97c \uc548\ub4dc\ub85c\uc774\ub4dc OS \ub0b4\uc5d0\uc11c \ub9cc\ub4e0\ub2e4\ub294 \uac83\uc785\ub2c8\ub2e4. \ub2e4\uc2dc \ub9d0\ud574 \uac1c\ubc1c\uc790\uac00 new Activity(&#8230;) \ub97c \ud560 \uc218 \uc5c6\ub294 \uac83\uc785\ub2c8\ub2e4. \uadf8\ub807\uae30 \ub54c\ubb38\uc5d0 \uc0dd\uba85\uc8fc\uae30\uc5d0\uc11c \ubc18\ub4dc\uc2dc \uba64\ubc84 \uc778\uc81d\uc158\uc774 \uc774\ub8e8\uc5b4\uc838\uc57c\ud558\uace0 \uadf8 \ucf54\ub4dc\ub294 \uc544\ub798\uc640 \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:java decode:true\">public class FrombulationActivity extends Activity {\r\n  @Inject Frombulator frombulator;\r\n\r\n  @Override\r\n  public void onCreate(Bundle savedInstanceState) {\r\n    super.onCreate(savedInstanceState);\r\n    \/\/ \ubc18\ub4dc\uc2dc \uc120\ud589\ub418\uc5b4\uc57c \ud560 \uc791\uc5c5, \uadf8\ub807\uc9c0 \uc54a\uc73c\uba74 frombulator\ub294 null\uc774 \ub429\ub2c8\ub2e4.\r\n    ((SomeApplicationBaseType) getContext().getApplicationContext())\r\n        .getApplicationComponent()\r\n        .newActivityComponentBuilder()\r\n        .activity(this)\r\n        .build()\r\n        .inject(this);\r\n    \/\/ \uc778\uc81d\uc158\uc774 \ub05d\ub0ac\uc73c\ubbc0\ub85c \uc2e0\ub098\ub294 \ucf54\ub529 \uc774\uc608~\r\n  }\r\n}<\/pre>\n<p>\uc704\uc758 \ucf54\ub4dc\ub294 \uc815\uc0c1\uc801\uc73c\ub85c \ub3d9\uc791 \ud558\uaca0\uc9c0\ub9cc, \uba87\uac00\uc9c0 \ubb38\uc81c\uc810\uc744 \uac00\uc9c0\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<ul>\n<li>\uc608\ub97c\ub4e4\uc5b4 \uc704\uc758 \ucf54\ub4dc\ucc98\ub7fc \uc778\uc81d\uc158\uc744 \ud558\uae30 \uc704\ud574 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ud1b5\ud55c \uc561\ud2f0\ube44\ud2f0 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc5bb\uc5b4 \ube4c\ub4dc \ud6c4 \uc778\uc81d\uc158 \ud558\ub294 \ub2e8\uc21c \ubc18\ubcf5\ub418\ub294 \ubcf4\uc77c\ub7ec\ud50c\ub808\uc774\ud2b8 \ucf54\ub4dc\ub294 \ub098\uc911\uc5d0 \ub9ac\ud329\ud1a0\ub9c1 \ud560 \ub54c \ud070 \uace0\ud1b5\uc744 \uc548\uaca8\uc90d\ub2c8\ub2e4.\u00a0<\/li>\n<li>\uc880 \ub354 \uadfc\ubcf8\uc801\uc73c\ub85c\ub294, \uc561\ud2f0\ube44\ud2f0 \ud074\ub798\uc2a4\uc5d0 \ub9de\ub294 \uc778\uc81d\uc158\uc774 \uc774\ub8e8\uc5b4\uc838\uc57c \ud569\ub2c8\ub2e4.\u00a0<span>\uc774\uac83\uc774 \uad6c\uccb4\uc801\uc778 \uc790\ub8cc\ud615 \ub300\uc2e0 \uc778\ud130\ud398\uc774\uc2a4\ub97c \ud1b5\ud574 \uc218\ud589\ub418\ub294 \uacbd\uc6b0\uc5d0\ub3c4 \uc885\uc18d\uc131 \uc8fc\uc785\uc758 \ud575\uc2ec \uc6d0\uce59\uc774 \uae68\uc9d1\ub2c8\ub2e4. \uc989, \ud074\ub798\uc2a4\uac00 \uc8fc\uc785\ub418\ub294 \ubc29\uc2dd\uc5d0 \ub300\ud574 \uc54c\uc9c0 \uc54a\uc544\uc57c\ud569\ub2c8\ub2e4.<\/span><\/li>\n<\/ul>\n<p>\uc548\ub4dc\ub85c\uc774\ub4dc\uc6a9 Dagger\ub294 \uc774\ub7ec\ud55c \ud328\ud134\uc744 \ub2e8\uc21c\ud654\ud574\uc8fc\ub294 \ubc29\ubc95\uc744 \uc81c\uacf5\ud574\uc8fc\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h1>\uc561\ud2f0\ube44\ud2f0\uc5d0 Injection\ud558\uae30<\/h1>\n<ol>\n<li>\uc548\ub4dc\ub85c\uc774\ub4dc\uc6a9 Dagger\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574 AndroidInjectionModule\uc744 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ucef4\ud3ec\ub10c\ud2b8\uc5d0 \ud3ec\ud568\uc2dc\ud0b5\ub2c8\ub2e4.<\/li>\n<li>AndroidInjector&lt;YourActivity&gt;\ub97c \uc0c1\uc18d\ud55c\u00a0 @Subcomponent \ud074\ub798\uc2a4\ub97c \ub9cc\ub4e4\uc5b4\uc57c\ud569\ub2c8\ub2e4. Subcomponent\ub294 @Subcomponent.Factory\ub97c \ub9cc\ub4e4\uc5b4\uc57c \ud558\ub294\ub370 \uc774\ub54c AndroidInjector.Factory&lt;YourActivity&gt;\ub97c \uc0c1\uc18d\ud569\ub2c8\ub2e4.\n<p>\uadf8\ub7ec\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ubaa8\uc591\uc0c8\uc758 \ucf54\ub4dc\uac00 \ub098\uc624\uac8c \ub429\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:java decode:true\">@Subcomponent(modules = ...)\r\npublic interface YourActivitySubcomponent extends AndroidInjector&lt;YourActivity&gt; {\r\n  @Subcomponent.Factory\r\n  public interface Factory extends AndroidInjector.Factory&lt;YourActivity&gt; {}\r\n}<\/pre>\n<\/li>\n<li>Subcomponent\ub97c \uc815\uc758\ud55c \ub4a4\uc5d0\ub294 \ubaa8\ub4c8\uc5d0 \ucd94\uac00\uc2dc\ud0b5\ub2c8\ub2e4. \uadf8\ub7f0\ub4a4 \ubaa8\ub4c8\ub0b4\uc5d0\uc11c subcomponent\uc758 factory\ub97c @Binds\uc640 @IntoMap\uc744 \uc0ac\uc6a9\ud558\uc5ec map\uc73c\ub85c \uba40\ud2f0\ubc14\uc778\ub529\ud558\uace0 \uc561\ud2f0\ube44\ud2f0\ub97c \ud074\ub798\uc2a4 \ud0a4\ub85c \uc9c0\uc815\ud569\ub2c8\ub2e4. Subcomponent\uac00 \ud3ec\ud568\ub41c \ud574\ub2f9 \ubaa8\ub4c8\uc744 \ucef4\ud3ec\ub10c\ud2b8\uc5d0 \ucd94\uac00\uc2dc\ud0b5\ub2c8\ub2e4. \uadf8\ub7ec\uba74 Application \uc2a4\ucf54\ud504\ub0b4\uc5d0\uc11c \ud574\ub2f9 subcomponent factory\ub97c \uc8fc\uc785\ubc1b\uc744 \uc218 \uc788\uac8c \ub429\ub2c8\ub2e4.\n<pre class=\"lang:java decode:true\">@Module(subcomponents = YourActivitySubcomponent.class)\r\nabstract class YourActivityModule {\r\n  @Binds\r\n  @IntoMap\r\n  @ClassKey(YourActivity.class)\r\n  abstract AndroidInjector.Factory&lt;?&gt;\r\n      bindYourAndroidInjectorFactory(YourActivitySubcomponent.Factory factory);\r\n}\r\n\r\n@Component(modules = {..., YourActivityModule.class})\r\ninterface YourApplicationComponent {}<\/pre>\n<p><strong>\uafc0\ud301 : \ub9cc\uc57d subcomponent\uc640 factory\uac00 \uc544\ubb34\ub7f0 \uba54\uc18c\ub4dc \ub610\ub294 \ubd80\ubaa8\ub97c \uc0c1\uc18d\ud558\uc9c0 \uc54a\ub294\ub2e4\uba74, 2,3\ubc88 \ub300\uc2e0\uc5d0 @ContributesAndroidInjector \uc560\ub178\ud14c\uc774\uc158\uc744 \uc0ac\uc6a9\ud558\uba74 \uc704\uc758 \ucf54\ub4dc\ub4e4\uc744 \uc790\ub3d9\uc73c\ub85c \uc0dd\uc131\ud574\uc90d\ub2c8\ub2e4. \ud574\ub2f9 \uc560\ub178\ud14c\uc774\uc158\uc744 \uc0ac\uc6a9\ud558\ub294\uacbd\uc6b0\uc5d0 abstract \ubaa8\ub4c8\uc774\uc5ec\uc57c \ud558\uba70 \uc561\ud2f0\ube44\ud2f0\ub97c \ubc18\ud658\ud558\ub294 \uba54\uc18c\ub4dc\uc5d0 \uc560\ub178\ud14c\uc774\uc158\uc744 \ubd99\uc5ec\uc57c\ud569\ub2c8\ub2e4. \ub9cc\uc57d subcomponent\uac00 scope\uac00 \ud544\uc694\ud558\ub2e4\uba74 scope\ub3c4 \ucd94\uac00 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/strong><\/p>\n<p>@ContributesAdnroidInject\ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:java decode:true\">@ActivityScope\r\n@ContributesAndroidInjector(modules = { \/* modules to install into the subcomponent *\/ })\r\nabstract YourActivity contributeYourAndroidInjector();<\/pre>\n<\/li>\n<li>\ub2e4\uc74c\uc740 HasAndroidInjector\ub97c Application\uc5d0 \uad6c\ud604\ud558\uace0 DispatchingAndroidInjector&lt;Object&gt;\ub97c \uc8fc\uc785\ubc1b\uc544 androidInjector() \uba54\uc18c\ub4dc\uc5d0\uc11c \ubc18\ud658\ud558\ub294 \uac83\uc785\ub2c8\ub2e4.\n<pre class=\"lang:java decode:true \">public class YourApplication extends Application implements HasAndroidInjector {\r\n  @Inject DispatchingAndroidInjector&lt;Object&gt; dispatchingAndroidInjector;\r\n\r\n  @Override\r\n  public void onCreate() {\r\n    super.onCreate();\r\n    DaggerYourApplicationComponent.create()\r\n        .inject(this);\r\n  }\r\n\r\n  @Override\r\n  public AndroidInjector&lt;Object&gt; androidInjector() {\r\n    return dispatchingAndroidInjector;\r\n  }\r\n}<\/pre>\n<\/li>\n<li>\ub9c8\uc9c0\ub9c9\uc73c\ub85c Activity.onCreate() \uba54\uc18c\ub4dc\uc5d0\uc11c AndroidInjection.inject(this)\ub97c super.onCreate(); \uc804\uc5d0 \ud638\ucd9c\ud558\uc138\uc694.\n<pre class=\"lang:java decode:true\">public class YourActivity extends Activity {\r\n  public void onCreate(Bundle savedInstanceState) {\r\n    AndroidInjection.inject(this);\r\n    super.onCreate(savedInstanceState);\r\n  }\r\n}<\/pre>\n<\/li>\n<\/ol>\n<p><strong>\uc5b4\ub5bb\uac8c \uc774\uac8c \ub3d9\uc791 \ud558\ub0d0\uad6c\uc694?<\/strong><\/p>\n<p>AndroidInjection.inject()\ub97c \ud638\ucd9c \ud558\uba74 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc73c\ub85c\ubd80\ud130 DispatchingAndroidInjector&lt;Object&gt;\ub97c \uc5bb\uac8c\ub418\uace0 \ud574\ub2f9 \uc561\ud2f0\ube44\ud2f0\ub97c \uc778\uc790\ub85c \uba54\uc18c\ub4dc \uc778\uc81d\uc158 \ud558\uac8c \ub429\ub2c8\ub2e4. inject(YourActivity);<\/p>\n<p>\ud504\ub808\uadf8\uba3c\ud2b8\uc758 \uacbd\uc6b0 onAttach()\uc5d0\uc11c \uc778\uc81d\uc158\ud569\ub2c8\ub2e4.<\/p>\n<p>\ubaa8\ub4c8\uc5d0 \uc815\uc758\ub41c \uc561\ud2f0\ube44\ud2f0\ub4e4\uacfc\ub294 \ub2ec\ub9ac \ud504\ub808\uadf8\uba3c\ud2b8\uc758 \uacbd\uc6b0 \uc5b4\ub290 \ubaa8\ub4c8\uc5d0 \uc124\uce58\ud560\uce58 \uc120\ud0dd\uad8c\uc774 \uc788\uc2b5\ub2c8\ub2e4. \ub2e4\uc74c\uacfc \uac19\uc774 \ud504\ub808\uadf8\uba3c\ud2b8\uc758 \ucef4\ud3ec\ub10c\ud2b8\ub97c \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<ul>\n<li>\ub2e4\ub978 \ud504\ub808\uadf8\uba3c\ud2b8 \ucef4\ud3ec\ub10c\ud2b8\uc758 \uc11c\ube0c\ucef4\ud3ec\ub10c\ud2b8\ub85c \ub9cc\ub4e0\ub2e4.<\/li>\n<li>\uc561\ud2f0\ube44\ud2f0 \ucef4\ud3ec\ub10c\ud2b8\uc758 \uc11c\ube0c\ucef4\ud3ec\ub10c\ud2b8\ub85c \ub9cc\ub4e0\ub2e4.<\/li>\n<li>\uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ucef4\ud3ec\ub10c\ud2b8\uc758 \uc11c\ube0c\ucef4\ud3ec\ub10c\ud2b8\ub85c \ub9cc\ub4e0\ub2e4.<\/li>\n<\/ul>\n<p>\ud504\ub808\uadf8\uba3c\ud2b8 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc5b4\ub514\uc5d0 \uc704\uce58\ud560 \uc9c0 \uacb0\uc815\ud558\uace0 \ub098\uba74, \ud504\ub808\uadf8\uba3c\ud2b8\ub97c \uc0ac\uc6a9\ud558\ub294 \uacf3\uc5d0\uc11c HasAndroidInjector\ub97c \uad6c\ud604\ud569\ub2c8\ub2e4. \ub9cc\uc57d\uc5d0 \ud504\ub808\uadf8\uba3c\ud2b8\ub97c YourActivity\uc758 \uc11c\ube0c\ucef4\ud3ec\ub10c\ud2b8\ub85c \uc9c0\uc815\ud588\ub2e4\uba74 \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\uc744 \uac81\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:java decode:true \">public class YourActivity extends Activity\r\n    implements HasAndroidInjector {\r\n  @Inject DispatchingAndroidInjector&lt;Object&gt; androidInjector;\r\n\r\n  @Override\r\n  public void onCreate(Bundle savedInstanceState) {\r\n    AndroidInjection.inject(this);\r\n    super.onCreate(savedInstanceState);\r\n    \/\/ ...\r\n  }\r\n\r\n  @Override\r\n  public AndroidInjector&lt;Object&gt; androidInjector() {\r\n    return androidInjector;\r\n  }\r\n}\r\n\r\npublic class YourFragment extends Fragment {\r\n  @Inject SomeDependency someDep;\r\n\r\n  @Override\r\n  public void onAttach(Activity activity) {\r\n    AndroidInjection.inject(this);\r\n    super.onAttach(activity);\r\n    \/\/ ...\r\n  }\r\n}\r\n\r\n@Subcomponent(modules = ...)\r\npublic interface YourFragmentSubcomponent extends AndroidInjector&lt;YourFragment&gt; {\r\n  @Subcomponent.Factory\r\n  public interface Factory extends AndroidInjector.Factory&lt;YourFragment&gt; {}\r\n}\r\n\r\n@Module(subcomponents = YourFragmentSubcomponent.class)\r\nabstract class YourFragmentModule {\r\n  @Binds\r\n  @IntoMap\r\n  @ClassKey(YourFragment.class)\r\n  abstract AndroidInjector.Factory&lt;?&gt;\r\n      bindYourFragmentInjectorFactory(YourFragmentSubcomponent.Factory factory);\r\n}\r\n\r\n@Subcomponent(modules = { YourFragmentModule.class, ... }\r\npublic interface YourActivityOrYourApplicationComponent { ... }<\/pre>\n<p>\uc0ac\uc2e4 \uae30\ubcf8\uc801\uc73c\ub85c \uc704\uc758 \ucf54\ub4dc\ub97c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294\ubc29\ubc95\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.\u00a0<\/p>\n<p>DispatchingAndroidInjector\ub294 \uc801\uc808\ud55c AndroidInjector.Factory\ub97c \ud2b9\uc815\ud074\ub798\uc2a4\uc5d0\uc11c \ub7f0\ud0c0\uc784\uc5d0 \ucc3e\uae30 \ub54c\ubb38\uc5d0, Base \ud074\ub798\uc2a4\uc5d0 HasAndroidInjector\ub098 AndroidInjection.inject()\ub97c \uad6c\ud604\ud560\uc218 \uc788\uc2b5\ub2c8\ub2e4. \ubaa8\ub4e0 \uc11c\ube0c\ud074\ub798\uc2a4\ub4e4\uc740 \uc801\ub2f9\ud55c @Subcomponent\ub97c \ubc14\uc778\ub529\ud558\ub294\uac83\uc744 \ud544\uc694\ub85c \ud569\ub2c8\ub2e4.<\/p>\n<p>Dagger\ub294 DaggerActivity\ub098 DaggerFragment\uc640 \uac19\uc740 \uba87\uba87 Base \ud0c0\uc785\uc744 \uc81c\uacf5\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \ub9cc\uc57d \ud074\ub798\uc2a4\uc758 \uacc4\uce35\uc774 \ubcf5\uc7a1\ud558\uc9c0 \uc54a\ub2e4\uba74 \uc81c\uacf5\ud558\ub294 Base\ud074\ub798\uc2a4\ub97c \uc0ac\uc6a9\ud558\ub294\uac83\uc774 \uc88b\uc740 \uc120\ud0dd\uc785\ub2c8\ub2e4. \ub9c8\ucc2c\uac00\uc9c0\ub85c DaggerApplication\ud074\ub798\uc2a4\ub3c4 \uc81c\uacf5\ud558\uace0 \uc788\ub294\ub370 \uc774 \ud074\ub798\uc2a4\ub97c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0 \uac1c\ubc1c\uc790\uac00 \ud560\uc77c\uc740 applicationInjector()\ub97c override\ud558\uc5ec \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ucef4\ud3ec\ub10c\ud2b8\ub97c \ubc18\ud658\ud558\ub294 \uac83 \ubfd0\uc785\ub2c8\ub2e4.<\/p>\n<p>\uae30\ud0c0 DaggerService, DaggerIntentService, DaggerBroadcastReceiver, DaggerContentProvider\ub3c4 \uc81c\uacf5\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>DaggerBroadcastReceiver\ub294 \uba54\ub2c8\ud398\uc2a4\ud2b8\uc5d0 \ub4f1\ub85d\ub41c \uacbd\uc6b0\uc5d0\ub9cc \uc0ac\uc6a9\ud574\uc57c\ud558\uba70, \ub9ac\uc2dc\ubc84\ub97c \uc9c1\uc811 \uc0dd\uc131\ud558\ub294 \uacbd\uc6b0\uc5d0\ub294 \uc0dd\uc131\uc790 \uc778\uc81d\uc158\uc744 \ud558\ub294\ud3b8\uc774 \ub354 \uc88b\uc2b5\ub2c8\ub2e4.<\/p>\n<h1>TL;DR<\/h1>\n<p>\uc774\uc804 \ud3ec\uc2a4\ud305\uc744 \ucc38\uc870\ud558\uc9c0 \uc54a\uace0 \uc774 \uae00\ubd80\ud130 \uc77d\uc73c\uc2e0\ubd84\uc740 \ub0b4\uc6a9\uc744 \uc774\ud574\ud558\uae30 \uc5b4\ub835\uc2b5\ub2c8\ub2e4. \uc2dc\uac04\uc744 \ub0b4\uc11c \uc774\uc804 <em>Dagger2\ub97c \uc54c\uc544\ubcf4\uc790<\/em> \uc2dc\ub9ac\uc988\ub97c \uc77d\uc5b4\ubcf4\uc2dc\ub294\uac78 \ucd94\ucc9c\ud569\ub2c8\ub2e4. \uc774\ubbf8 \uc774\uc804 \uae00\ub4e4\uc744 \ub2e4 \uc77d\uace0 \uc624\uc2e0\ubd84\uc774\uace0, \ub2e8\uc9c0 \ud504\ub85c\uc81d\ud2b8\uc5d0 Dagger2\ub97c \uc5b4\ub5bb\uac8c \uc801\uc6a9\ud560\uc9c0 \uace0\ubbfc \ud558\uace0 \uacc4\uc2dc\ub2e4\uba74 <a href=\"https:\/\/www.charlezz.com\/?p=428\">\uc548\ub4dc\ub85c\uc774\ub4dc\uc5d0\uc11c Dagger2 \uc801\uc6a9\ud558\uae30<\/a>\ub97c \ucc38\uace0\ud558\uc2dc\uba74 \uc608\uc81c\uc640 \ud328\ud134\uc744 \uc81c\uacf5\ud558\uace0 \uc788\uc73c\ub2c8 \ucc38\uace0\ud558\uc2dc\uba74 \uc88b\uc2b5\ub2c8\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; \uae30\ubcf8\ud3b8 Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; Scope\u00a0 Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; Injection\uc758 \uc885\ub958\u00a0 Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; Qualifier\u00a0 Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; Binding\u00a0 Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; Multibinding\u00a0 Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; SubComponent\u00a0 Dagger2\ub97c \uc54c\uc544\ubcf4\uc790 &#8211; Android\u00a0(You&#8217;re here) 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 \ub300\ubd80\ubd84\uc758 \ub2e4\ub978 \uc758\uc874\uc131 \uc8fc\uc785 \ud504\ub808\uc784 \uc6cc\ud06c\uc5d0 [&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\/1357"}],"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=1357"}],"version-history":[{"count":5,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/1357\/revisions"}],"predecessor-version":[{"id":45077,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/1357\/revisions\/45077"}],"wp:attachment":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1357"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1357"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1357"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}