인프런 커뮤니티 질문&답변

jminie님의 프로필 이미지
jminie

작성한 질문수

냉동코더의 알기 쉬운 Modern Android Development 입문

Practice2C-Android App Architecture 기반 구축하기 (Repository, ViewModel, Coroutine, Livedata)

Activity에서 ViewModel 인스턴스 생성 질문입니

작성

·

119

0

 

class BookSearchViewModelFactory: ViewModelProvider.Factory {

    override fun <T : ViewModel> create(modelClass: Class<T>): T {
        return when {
            modelClass.isAssignableFrom(BookSearchViewModel::class.java) -> BookSearchViewModel(BookSearchRepositoryImpl()) as T
            else -> throw IllegalAccessException("Failed to create ViewModel")
        }
    }
}

private val bookSearchViewModel: BookSearchViewModel by viewModels { BookSearchViewModelFactory() }

이전에 프로젝트를 할 때는 ViewModelFactory에 생성자로 아무것도 받지 않고 위 코드처럼 구현했었는데 (그러면 Activity에서도 뷰모델 인스턴스를 비교적 쉽게 가져올 수 있었습니다.) 영상처럼 하는 이유가 있나요? (코드가 까맣게 보이네요,,,ㅠㅠ)

답변 1

0

냉동코더님의 프로필 이미지
냉동코더
지식공유자

강의에서는
1. 팩토리 클래스를 정의하고
2. 그것의 인스턴스를 만든 뒤
3. 프로바이더에 팩토리 인스턴스를 전달해서 뷰모델 인스턴스를 만들었습니다.

activity-ktx 라이브러리의 by viewModels를 사용하면 뷰모델 인스턴스를 바로
편하게 만들 수
있는데 사실은 2, 3번 작업을 안하는게 아니라 액티비티가 위임받아서 대신 해주는 것입니다.

Practice2C에서는 구조를 이해하시라고 굳이 뷰모델 인스턴스를 이렇게 장황하게 만든 것이고
실제 프로젝트에서는 당연히 by viewModels를 쓰시는 것이 편합니다.
참고로 by viewModels를 사용하면 팩토리 클래스를 따로 정의하실 필요도 없습니다.

Practice10B와 Practice10C에서 by viewModels를 사용하는 방법을 설명하고 있으니
그 영상도 참고해 보세요 :)

 

 

jminie님의 프로필 이미지
jminie

작성한 질문수

질문하기