seminar-2020 icon indicating copy to clipboard operation
seminar-2020 copied to clipboard

DI 모듈에 의한 Injection이 이루어지는 방식

Open veldic opened this issue 3 years ago • 2 comments

assignment 3 specification에 보면 (뼈대코드의 DI 모듈에서 알아서 MovieRepository 로 inject 됩니다.) 라고 되어 있는데 결국 MainActivity에서 ViewModel에 Repository 를 넣어서 선언해서 사용해줘야 하는데 이 또한 자동으로 되는지의 여부 (아마 될 것 같기는 합니다)

그렇다면 이렇게 inject된 ViewModel을 어떻게 사용해야 하는것인지? lecture 4에서 보여주셨던 예시 코드와 skeleton files에 있는 코드들의 형태가 유의미하게 다른 부분이 많은 것 같아 질문드립니다.

veldic avatar Oct 21 '20 07:10 veldic

  1. DiscoverActivity 에서 viewModels 라는 koin의 function 으로 DI 가 시작됩니다.
  • viewModels 는 해당 제네릭에 맞는 ViewModel (DiscoverViewModel) 을 주입 시도합니다.
  • DiscoverViewModel 은 생성자에서 MovieRepository 주입이 필요합니다.
  • 따라서 koin 은 Module 에서 return type 이 MovieRepository 인 provider( single { MovieRepository(get()) } ) 를 찾고 주입 시도 합니다.
  • 여기서 Repository 는 또 서비스를 필요로하고 ... 찾고 주입하고 ... 이런식으로 인젝션이 이뤄진다고 보면 될 것 같습니다.
  1. 질문의 맥락을 정확히 이해하지는 못하겠지만, MVVM 에서 ViewModel 은 결국 View 가 데이터를 읽어오는(observe, subscribe 하는) 데이터의 근원이기 때문에 그에 맞는 역할을 할 수 있도록 코드를 짜시면 될 것 같습니다.
  • 이 부분들은 강의 시간에 알려드린 Reactive Programming 을 위한 Library(LiveData or RxJava) 를 자유롭게 사용하시면 좋을 것 같습니다.

sanggggg avatar Oct 21 '20 13:10 sanggggg

2번의 경우 뼈대 코드를 수정하는 과정에서 koin에서 제공받는 부분을 삭제해서 그런거였습니다...! #244 에 잘못올렸었네요

veldic avatar Oct 22 '20 03:10 veldic