DI(의존성 주입)

박재원·2022년 1월 20일
post-thumbnail

의존성 주입을 왜?

객체 간의 의존성을 떨어트릴수 있음
코드의 재활용 용이
Unit Test 진행 수월

class Sample {
    val book = Book()
    
    fun readBook() {
    	book.read()
    }
}

vs

class Sample(book: Book) {
    fun readBook() {
    	book.read()
    }
}

Android에서 의존성 주입하기(Hilt)

  1. @HiltAndroidApp
    -Application Class에 적용(ApplicationContext 사용 목적)
@HiltAndroidApp
class BookApplication: Application()
  1. @AndroidEntryPoint
  • Activity, Fragment, View, Service, BroadcastReceiver에 적용
@AndroidEntryPoint
class MainActivity : AppCompatActivity()

@AndroidEntryPoint
class MainFragment : Fragment(layoutId)
  1. @HiltViewModel
  • ViewModel class에 적용 (with by viewModels())
@HiltViewModel
class MainViewModel
  1. @Inject
  • 주입 할 객체, 주입 받을 곳에 적용
class MainViewModel @Inject constructor()
  1. @Module, @InstallIn, @Provides vs @Binds
  • 외부 라이브러리 및 특정 모듈 적용시
@InstallIn(SingletonComponent::class)
@Module
object RepositoryModule

@Singleton
@Binds
abstract fun bindBookRepository(bookRepositoryImpl: BookRepositoryImpl): BookRepository
          
@Provides
@Singleton
fun provideBookRepository(api: BookApi): BookRepository {
return BookRepositoryImpl(api)
  1. @Qualifier, @Retention, annotation class
    -같은 Type에 객체를 여러개 주입이 필요한 경우
@Qualifier
@Retention(AnnotationRetention.BINARY)
annotation class ResponseInterceptor
profile
Android developer.

0개의 댓글