• Activity ViewModel을 활용해 프래그먼트간 통신

엑티비티 안에서는 viewModels() 함수를 통해 뷰모델을 생성하거나 검색할 수 있다.

activity-ktx, fragment-ktx 디펜던시를 추가해야함

    // Using the viewModels() Kotlin property delegate from the activity-ktx
    // artifact to retrieve the ViewModel in the activity scope
    private val viewModel: ItemViewModel by viewModels()

해당 엑티비티 안에 붙어있는 프래그먼트의 경우 activityViewModels() 함수를 사용해 부모 엑티비티의 뷰모델을 생성하거나 검색 할 수 있고 생선한 뷰모델로 프래그먼트간, 부모 엑티비티간 통신이 가능하다

    private val viewModel: ItemViewModel by activityViewModels()

Koin을 사용해 ViewModel을 생성 (viewModel(), sharedViewModel())

의존성 프로젝트 모듈 단위 build.gradle에 추가

// koin viewmodel
implementation 'org.koin:koin-androidx-viewmodel:2.2.2'


객체 주입

// framgnet의 viewmodel 호출
val mainViewModel: MainViewModel by viewModel()

// activity의 viewmodel 호출 (shared viewmodel 구현)
val mainViewModel: MainViewModel by sharedViewModel()


자잘한 공부

  • 버튼 커스텀 안될 때 으로 바꾸기

  • viewBinding을 사용하면 findViewById 보다 성능이 좋고 type Safe 하다.

  • Fragment에서 viewBinding을 사용하면 view는 없지만 Fragment는 존재 가능, 즉 메모리 누수가 생긴다. 이를 막기위해 _binding 객체를 null로 지정해주고 onCreateView() 안에서 binding을 할당, onDestroyView() 에서 메모리 해제