[안드로이드 Hilt 5] - ViewModel 주입

이영준·2023년 7월 16일
1

안드로이드_Hilt

목록 보기
5/5

ViewModel을 왜 주입해야할까?

문득 뷰 모델을 주입할 필요성에 대한 의문이 들었다.
androidx-fragment ktx dependency 를 빌드 파일에 추가해주면 기존에도 객체 선언 없이

 private val viewModel: MainViewModel by viewModels()

위와 같이 뷰모델을 선언하여 초기화 할 수 있었다. 또한 그 뷰모델은 해당 액티비티나 프래그먼트에서만 사용하고 가져오기 때문에 의존성 그래프에 굳이 넣지 않더라도 불편할 일이 없지 않을까? 하여 GPT에 물어봤다.

테스트를 하지 않는 다는 전제 하에 결국 생성자 주입을 할 수 있다는 점이 뷰모델을 주입하는 이유라고 생각된다. 물론 언제가 TDD를 구현할 때는 테스트 용이성으로서의 의미도 같겠지만...

기존 뷰모델 주입

class StatsViewModel @ViewModelInject constructor() : ViewModel(){
}

기존에는 위와 같은 방법으로 뷰모델을 주입했었다. 여기다가 앱이 꺼지더라도 뷰모델의 데이터를 보존하기 위해 savedStatedHandle을 사용하는 경우에는

class StatsViewModel @ViewModelInject constructor(
@Assisted private val savedStateHandle : SavedStateHandle) : ViewModel(){
}

위와 같이 Assisted 애너테이션으로 선언해야 힐트가 데이터의 보존을 보장해줄 수 있었다.
현재는 위와 같이 할 필요 없이

@HiltViewModel
class StatsViewModel @inject constructor(
private val repository: MyRepository,
private val savedStateHandle : SavedStateHandle) : ViewModel(){
}

위와 같이 선언하도록 바뀌었다. SavedStatdeHandle을 사용할 때도 특별히 애너테이션을 사용하지 않아도 되며, hilt로 생성한 repository를 생성자에 넣을 수 있다는 점이 힐트 뷰모델을 쓰는 가장 큰 이유이다.

profile
컴퓨터와 교육 그사이 어딘가

2개의 댓글

comment-user-thumbnail
2023년 7월 16일

잘봤습니다.

답글 달기
comment-user-thumbnail
2023년 7월 17일

저도 개발자인데 같이 교류 많이 해봐요 ㅎㅎ! 서로 화이팅합시다!

답글 달기