Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- builderPattern
- 옵저버 패턴
- 추상 팩토리
- Kotlin
- designPattern
- Abstract Factory
- factory method
- 팩토리 메소드
- Singleton
- F
- Functional Programming
- 디자인패턴
- Design Pattern
- 프로토타입 패턴
- a
- PrototypePattern
- 추상팩토리패턴
- Observer Pattern
- 함수형프로그래밍
- r
- ㅋㅁ
- 디자인패턴 #
- 싱글톤
- El
- ㅓ
- 빌터패턴
- 코틀린
Archives
- Today
- Total
오늘도 더 나은 코드를 작성하였습니까?
Android Code Lab(Dagger2) 정리5 본문
객체의 Scope를 다른 LifeCycle로 지정하는 것 외에도 Subcomponent를 만드는 것은 애플리케이션의 서로 다른 부분을 캡슐화하는 좋은 방법이다.
앱의 Flow에 따라 다른 Dagger Sub Graph를 생성하여 앱을 구조화를 하면 Memory 및 App Start Time면에서 보다 성능이 좋고 확장 가능한 응용 프로그램을 만드는 데 도움이 됩니다.
Dagger Component 를 읽고 모듈화하기 어렵게 만들 수 있으므로 App의 모든 객체를 제공하는 모놀리식(1개의 Component만 사용) Component를 만들면안된다.
LoginComponent 생성하기.
LoginActivity와 동일한 수명을 가지므로 ActivityScope로 LoginComponent에 주석을 추가.
LoginComponent.kt
@ActivityScope
@Subcomponent
interface LoginComponent {
@Subcomponent.Factory
interface Factory {
fun create(): LoginComponent
}
fun inject(activity: LoginActivity)
}
LoginViewModel.kt
class LoginViewModel @Inject constructor(private val userManager: UserManager) {
...
}
LoginViewModel은 다른 클래스에서 재사용할 필요가 없으므로 @ActivityScope로 주석을 달지 않아야 된다.
AppSubcomponent.kt
@Module(subcomponents = [RegistrationComponent::class, LoginComponent::class])
class AppSubcomponents
AppSubcomponents 모듈에 있는 AppComponent의 Subcomponent 목록에 새 하위 LoginComponent를 추가해야 합니다.
AppComponent.kt
@Singleton
@Component(modules = [StorageModule::class, AppSubcomponents::class])
interface AppComponent {
...
// Types that can be retrieved from the graph
fun registrationComponent(): RegistrationComponent.Factory
fun loginComponent(): LoginComponent.Factory
// Classes that can be injected by this Component
fun inject(activity: MainActivity)
}
LoginActivity가 LoginComponent 팩토리에 액세스할 수 있으려면 AppComponent 인터페이스에서 이를 노출해야 합니다.
LoginActivtiy.kt
class LoginActivity : AppCompatActivity() {
lateinit var loginViewModel: LoginViewModel
...
override fun onCreate(savedInstanceState: Bundle?) {
(application as MyApplication).appComponent.loginComponent().create().inject(this)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
...
}
}
현재 Application Graph
'DI > Dagger2' 카테고리의 다른 글
Android Code Lab(Dagger2) 정리7 (0) | 2021.12.22 |
---|---|
Android Code Lab(Dagger2) 정리6 (0) | 2021.12.22 |
Android Code Lab(Dagger2) 정리4 (0) | 2021.12.21 |
Android Code Lab(Dagger2) 정리3 (0) | 2021.12.21 |
Android Code Lab(Dagger2) 정리2 (0) | 2021.12.21 |