inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

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

162

jminie

작성한 질문수 29

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에서도 뷰모델 인스턴스를 비교적 쉽게 가져올 수 있었습니다.) 영상처럼 하는 이유가 있나요? (코드가 까맣게 보이네요,,,ㅠㅠ)

kotlin architecture android jetpack

답변 1

0

냉동코더

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

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

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

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

 

 

Coroutine, Flow 질문

0

401

1

Transformations import 안됨

0

588

1

moshi관련 질문입니다.

0

566

2

searchBooks() 에서 북 검색 입력을 너무 빨리 할 경우 마지막 글자로 검색이 안돼요.

0

375

1

안드로이드에서 아키텍처 패턴

0

423

1

RecyclerView.Adapter vs ListAdpater

0

473

1

Flows 와 Coroutine

1

573

1

[BookSearchAdapter] onBindViewHolder의 currentList[position] 질문

0

370

1

코루틴 메모리 관련해서 질문드립니다!

0

457

1

Java Bill Pugh Solution 에서 INSTANCE

0

469

1

nested json에서 특정 부분만 파싱하는법

0

495

1

Fragment에서의 viewBinding

0

525

3

toolbar 질문드립니다.

0

417

2

EditText 에서 delay 주셔서 처리하셨는데 flow 의 debounce() 하고 같은건가요?

2

568

1

코루틴 관련 질문

0

549

1

오류

1

494

2

강사님! 직렬화 라이브러리를 Moshi, kotlin serialization 두개를 사용하시던데 이유가 있으신가요?

1

749

1

EditText 는 kill 해도 값이 잘 저장되어있던데 혹시 제가 잘못테스트했을까요?

1

354

1

서버도 페이징 기능이 되는데 Paging 라이브러리가 필요할까요?

1

530

1

GSON 이 아닌 Moshi 를 사용하시는 이유가 있을까요?

1

1271

1

EditText 는 액티비티가 재생성되어도 값이 남아있던데 이유가 궁금해요

1

498

1

ViewModel 생성시 왜 초기값을 받지 않도록 했을까요?

1

438

1

Room DB에 id 항목 추가

0

255

1

안녕하세요. 용어에 대해 질문이 있어 글 남깁니다.

0

410

2