작성
·
218
0
ViewModelProviderFactory이 잘 이해가 안갑니다!!
Repository와 ViewModel 둘 만 있으면 ViewModel 생성자 부분이 아닌 다른 곳에다가 변수로 Repository를 선언해주면 똑같이 api호출할 수 있는 것 아닌가요!?
굳이 왜 ViewModelProviderFactory가 필요한지 이해가 안갑니다!
답변 2
0
ViewModel 내부에서 Repository 인스턴스를 만드는 것은 좋은 방법이 아닙니다. 외부에서 인스턴스를 만들어 의존성으로 주입하시는 것이 가장 좋은 방법인데, 의존성 주입에 대해서는 [섹션 10. Dagger-Hilt]를 학습하시면 잘 사용하실 수 있으실거에요 :)
0
외부에서 작성한 Repository 인스턴스를 ViewModel에 전달해 주어야 하는데 ViewModelProvider로 ViewModel 인스턴스를 생성할 때는 초기값을 전달할 수가 없습니다. 그래서 ViewModelProvider.Factory를 사용해 초기값으로 전달하는 것입니다.
Practice2C 시점에서는 Repository에 싱글톤으로도 사용할 수 있는 api 밖에 없어서 굳이 초기값으로 전달해야 할 필요성이 안 보일 수도 있으나, 이후 강의에서 여러가지 모듈이 추가되기 때문에 초기값으로 전달해 준 것입니다. 참고하시라고 강의가 완료된 시점의 Repository 코드 링크를 첨부해 드립니다.
자세한 답변 감사합니다!!
제가 첫 프로젝트에서 진행할 때에는 밑에 처럼 생성해서 사용하였습니다.
별 다른 문제 없이 api를 호출할 수 있었는데, 밑에 처럼 했을 때 생기는 문제점이 있을까요?
<activity 코드>
val viewModel = ViewModelProvider(this).get(MainViewModel::class.java)
<ViewModel 코드>
private val repository = Repository()
private val _result = MutableLiveData<List<Plant>>()
val result : LiveData<List<Plant>>
get() = _result
fun getAllData() = viewModelScope.launch {
Log.d("MainViewModel", repository.getAllData().toString())
_result.value = repository.getAllData()
}
넵!! 자세한 답변 감사드립니다 :)