Hilt Module을 object or class로 선언했을 때 차이점?

유재민·2023년 5월 8일
0
post-thumbnail
@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 be object classes. This way, providers get optimized and almost in-lined in generated code.

@Provides 만 포함하는 Module인 경우 object로 정의하게 되면 provider가 최적화 된 코드, 인라인 형태의 코드로 제공된다.

그래서 @Provides 로만 이루어진 모듈의 경우 object를 사용하자!

Using Hilt in your Android app | Android Developers

profile
유잼코딩

0개의 댓글