ViewModel을 생성할때 MVVM으로 구현했다면 파라미터로 repository 객체를 받아야하는데, 이는 ViewModel이 respository에게 의존하고 있는 형태인것이다.(안드로이드의 아키텍쳐 의존성 방향을 생각해보면 presentation(ViewModel포함)->data->domain(repository포함) 순서로 의존성이 적음)
Activity나 Fragment에서 Viewmodel을 사용하기 위해서 ViewModelprovider로부터 ViewModel인스턴스를 get()받아와야하는데 이때, ViewModel의 인자로 repository객체가 들어가야 한다면 어떻게 해야할까?
이런경우 ViewModelProvider.Factory를 커스텀하여 커스텀한 viewModelFactory를 만들어야한다. 매번 viewModelFactory를 만들어서 사용하면..보일러코드 증가는 물론 유지보수를 할때도 좋지 않다.
그렇다면, ViewModel의 파라미터로 들어가야할 repository객체를 누군가 만들어서 넣어주면 내가 이 객체를 제어하지 않아도 되니까 개꿀아닐까? 맞다. 이게 의존성 주입의 시작이다.
DI(Dependency Injection)
: 외부에서 의존 객체를 생성해서 넘겨주는 것. DI는 IOC(Inversion of Control=제어의 역전)을 구현하는 방법 중 하나다.DI Framework
: DI를 위해서는 '넘겨주는 무언가'가 필요하다. 이 '넘겨주는 무언가'의 역할을 하는게 DI Framework다. Dagger2
, Dagger2 Hilt
가 있다.