Dagger - YunByungKwan/Fundamental GitHub Wiki
- Activity/Fragment๋ Dagger๊ฐ ์๋์ผ๋ก ์์ฑํ ์ ์๋ค. ๋ฐ๋ผ์ Activity/Fragment์์๋ ํ๋ ์ฝ์ ๋ง ๊ฐ๋ฅํ๋ค. ์ฐธ๊ณ ๋ก, ํ๋ ์ฝ์ ์ ์์ฑ์ ์ฝ์ ์ ํ ์ ์๋ Androidํ๋ ์์ํฌ ํด๋์ค์์๋ง ์ฌ์ฉํด์ผ ํ๋ค.
- DaggerActivity ํน์ DaggerFragment๋ฅผ ์ฌ์ฉํ์ง ์์์ ๊ฒฝ์ฐ, AppComponet.inject()๋ฅผ ํธ์ถํ ๋ Activity๋ super.onCreate() ์ ์ ํธ์ถ Fragment๋
- @Inject: Dagger๊ทธ๋ํ์์ ์ธ์คํด์ค๋ฅผ ๊ฐ์ ธ์ค๊ณ ์ถ์๋ ๋ถ์ธ๋ค.
- @Provides๋ ํ๋ก์ ํธ๊ฐ ์์ ํ์ง ์์ ํด๋์ค(Retrofit ์ธ์คํด์ค)๋ฅผ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ์ Dagger์๊ฒ ์๋ฆด ์ ์๋ค.
- @Binds๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๋ ์ฌ์ฉํ๊ธฐ๋ฅผ ๊ถ์ฅํ๋ค.(Android Developer์ฌ์ดํธ์ ๋์ ์์)
- ๋ชจ๋์ ๊ฐ์ฒด๋ฅผ ์ ๊ณตํ๋ ๋ฐฉ์์ ๊ดํ ์ ๋ณด๋ฅผ ์๋ฏธ๋ก ์ ์ผ๋ก ์บก์ํํ๋ ๋ฐฉ๋ฒ์ด๋ค.
- @Inject์ ํจ๊ป ์์ฑ์ ์ฝ์ ์ ์ฌ์ฉํ ๋๋ ํด๋์ค์ ๋ฒ์ ์ฃผ์์ ์ถ๊ฐํ๊ณ Dagger ๋ชจ๋์ ์ฌ์ฉํ ๋๋ @Provides ๋ฉ์๋์ ๋ฒ์ ์ฃผ์์ ์ถ๊ฐํ๋ค.
- @ContributesAndroidInjector: ์ด ์ด๋ ธํ ์ด์ ์ ๋ถ์ธ ๋ฉ์๋์ returnํ์ ์ ๋ํ AndroidInjector๋ฅผ ์์ฑํ๋ค. SubComponent๊ฐ ์์๋ ์ฌ์ฉํ๋ ์ด๋ ธํ ์ด์ ์ธ ๊ฒ ๊ฐ๋ค.
Android์์ Dagger๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ 3๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
- Component Module Scope๋ฅผ ๋ชจ๋ ์ง์ ๊ธฐ์ ํด์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
๋ณด์ผ๋ฌํ๋ ์ดํธ ์ฝ๋๊ฐ ๋๋ฌด ๋ง์์ ธ์ ์ด๋ ๊ฒ ์ ์์ด๋ค.
override fun onCreate(savedInstanceState: Bundle?) { ... val mainComponent: MainComponent = (application as MyApplication).appComponent.mainComponent().create() // Member-Injection mainComponent.inject(this@MainActivity) // Provision var coffee2: Coffee = mainComponent.coffee() } ... interface MainComponent { fun inject(activity: MainActivity) }
- DispatchingAndroidInjector๋ฅผ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ
- AndroidInjectionModule ์ถ๊ฐ
- ActivityBindingModule ์ถ๊ฐ
- AndroidInjector <Activity ๋๋ Fragment> ์์(SubComponent interface์ ์์)
- AndroidInjector.Factory<Activity ๋๋ Fragment> ์์
- Application ๋จ์ ํด๋์ค์์ HasAndroidInjector๋ฅผ ์์ํ๊ณ androidInjector()๋ฉ์๋๋ฅผ ๊ตฌํํ๊ธฐ
- ๊ฐ Activity/Fragment์์ AndroidInjection.inject()๋ก ์์กด์ฑ ์ฃผ์ ์ ์๋ฃ
- ์๋๋ก์ด๋ ๊ธฐ๋ฐํด๋์ค(DaggerApplication, DaggerActivity, DaggerFragment)๋ก ์ ๊ณตํ๋ ๋ฐฉ๋ฒ
- Component์ AndroidSupportInjectionModule ์ถ๊ฐ
- AppComponent์์ AndroidInjector ์์
- Member-Injection Method inject() ์ ๊ฑฐ
Dagger์ ๋ํด ์ค๋ช
Dagger๋ ์์กด์ฑ์ฃผ์ ํ๋ ์์ํฌ์ ๋๋ค. Dagger๋ ์ด๋ ธํ ์ด์ ์ ํตํด์ ์ปดํ์ผ ํ์์ ์์กด์ฑ์ ์ฃผ์ ํฉ๋๋ค.
@Provides์ @Binds์ ์ฐจ์ด์ ์ ๋ํด ์ค๋ช
@provides๋ ~~~์ ๋๋ค. @Binds๋ ~~~์ ๋๋ค.