티스토리 뷰
|개요
과제 개발을 하던 중에 겪은 일이다.
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를 사용하는 것이 좋다는 것을 느꼈다.
'Develop > Mobile' 카테고리의 다른 글
- Total
- Today
- Yesterday
- 안드로이드
- 정보보안
- DataBinding
- writeup
- CTF
- reversing.kr
- 리버싱.kr
- 리버싱기초
- NumberFormatException
- 스프링부트
- Java
- 동적분석
- 뷰모델
- exception
- 자바
- 코드로 배우는 스프링 부트
- 칼리리눅스
- reversing.kr풀이
- 포너블.kr
- Spring
- AndroidX
- Android
- 에러
- pwnable.kr
- 앱분석
- 펌웨어 분석
- 웹 MVC
- androidstudio
- MVVM
- 모바일리버싱
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |