@Module
@InstallIn(SingletonComponent::class)
object NetworkModule {
@Provides
@Singleton
fun provideLoggingInterceptor(): HttpLoggingInterceptor {
return HttpLoggingInterceptor().apply {
level = if (BuildConfig.DEBUG) {
HttpLoggingInterceptor.Level.BODY
} else {
HttpLoggingInterceptor.Level.NONE
}
}
}
}
위의 코드를 보면 NetworkModule은 object로 정의되어 있다.
class로 정의하여도 문제없이 잘 돌아가는데, 두 정의 방식은 어떤 차이가 있을까?
공식문서에는 이러한 문장이 있다.
💡 In Kotlin, modules that only contain
@Provides
functions can beobject
classes. This way, providers get optimized and almost in-lined in generated code.
@Provides
만 포함하는 Module인 경우 object로 정의하게 되면 provider가 최적화 된 코드, 인라인 형태의 코드로 제공된다.
그래서 @Provides
로만 이루어진 모듈의 경우 object를 사용하자!