티스토리 뷰

|개요

과제 개발을 하던 중에 겪은 일이다.

MVVM(Model-View-ViewModel) 구조로 프로젝트를 구성해서 개발을 진행하고 있었는데, 일부 Activity가 코틀린으로 개발이 되어있었다.

 

코틀린은 문법 공부를 잠깐 하긴 했지만, 프로젝트를 진행해본 적은 없어서 잘 모르고 있었는데,

Java에서 ViewModel을 사용하는 것 처럼 아래와 같이 해줬는데 this에 자꾸 빨간 줄이 뜨는 것!!🤔

 

ViewModel viewmodel = ViewModelProviders(this).get(ViewModel.class)			//java
ViewModel viewmodel = ViewModelProviders(this).get(ViewModel::class.java)	//kotlin

이 부분의 원인이 이해가 안되서 ViewModelProviders에 대해 자세히 찾아보았다.

 

 

|ViewModelProviders

ViewModelProviders 의 코드를 보면 ViewModelProviders 는 파라미터로 ViewModelOwner를 받는다. 

ViewModelOwner는 extends 를 하여 getViewModelStore() 라는 함수를 오버라이딩을 해주면 된다. 

 

그런데 이때, Activity나 Fragment 같은 경우에는 기본적으로 ViewModelOwner 인데 대체 왜..? 빨간줄이 뜨는건지 이해가 안됐다!!!

 

 

 

 

|원인

원인은 바로 Activity 를 extends 해왔기 때문이었다.

앞에서 Activity가 기본적으로 ViewModelOwner 라고 말했는데, 정확히는 AppCompatActivity가 그러하다.

 

Activity를 extends 해서 사용할 경우에는 ViewModelOwner를 따로 extends 를 하여 getViewModelStore() 함수를 오버라이딩 하여 ViewModelStore를 반환 해주는 작업이 필요하다.

(ViewModelOwner가 아니라는 소리)

 

 

|결론

되도록이면 Activity는 AppCompatActivity를 이용하자.

나의 경우 기본적으로 짜져있는 코드가 존재해서 extends 를 그대로 두고 ViewModelOwner를 또다시 extends 해주는 작업을 했지만, 안드로이드 버전 호환성이나 개발 편의성을 고려했을때 AppCompatActivity를 사용하는 것이 좋다는 것을 느꼈다.

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함