쏭식
Ssongcode;
쏭식
전체 방문자
오늘
어제
  • 분류 전체보기 (106)
    • JAVA (21)
      • Basic (21)
    • Kotlin (14)
      • Basic (14)
    • Android (64)
      • Basic (24)
      • JETPACK (30)
      • Compose (8)
      • 파고들기 (2)
    • Project (4)
    • etc (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 메소드
  • 상속
  • DataBinding
  • 코틀린코테
  • AAC
  • livedata
  • ViewModel
  • 변수
  • 코드업100제
  • workmanager
  • Adapter
  • Kotlin
  • 코딩테스트
  • compose
  • 리사이클러뷰
  • Android
  • 프로젝트회고
  • 자료구조
  • 객체지향
  • Jetpack
  • mvvm
  • 코테
  • 컴포즈
  • Room
  • 알고리즘
  • 코틀린
  • 자바
  • 배열
  • 기초100제
  • 백준

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
쏭식

Ssongcode;

[JETPACK개론] ViewModel ?
Android/JETPACK

[JETPACK개론] ViewModel ?

2022. 8. 11. 23:59

ViewModel

 

ViewModel 개요  |  Android 개발자  |  Android Developers

ViewModel을 사용하면 수명 주기를 인식하는 방식으로 UI 데이터를 관리할 수 있습니다.

developer.android.com

위의 안드로이드 공식문서를 읽어보면 자세히 나와있지만 처음 접하는 나같은 사람들에게는 어렵게 다가올 수 있다.

정리하자면 

ViewModel은 안드로이드의 생명주기를 관리하기 쉽게한다.

 

다시말해, UI컨트롤러(Activity, Fragment)에서 모든 것을 다 하려고 하면 복잡해지는데,

ViewModel을 사용하면 테스트나 관리가 용이해진다.

 

먼저 간단하게 Activity에서 ViewModel을 사용해보면서 이해해보자!!

출처 : 안드로이드 공식문서

위의 그림을 이해하기 위해 다음과 같이 로그를 찍어보자.

override fun onCreate(savedInstanceState: Bundle?) {

    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    Log.d("MainAcitivty", "onCreate")
override fun onStart() {
    super.onStart()
    Log.d("MainAcitivty", "onStart")
}
override fun onResume() {
    super.onResume()
    Log.d("MainAcitivty", "onResume")
}
override fun onPause() {
    super.onPause()
    Log.d("MainAcitivty", "onPause")
}
override fun onStop() {
    super.onStop()
    Log.d("MainAcitivty", "onStop")
}
override fun onDestroy() {
    super.onDestroy()
    Log.d("MainAcitivty", "onDestroy")
}

먼저 처음 앱을 실행하게 되면

이렇게 로그가 찍히는 것을 확인할 수 있다.

하지만 앱을 종료하거나, 앱을 다음과 같이 회전을 하게 되면

위와 같이 로그가 찍힌다.

여기서 생기는 문제점은 다음과 같이 plus를 누르면 숫자가 올라가고 minus를 누르면 숫자가 내려가는 view가 있다고 가정했을 때

앱을 회전하게 되면 onStop이 실행되면서 데이터가 사라지게 된다.

앱을 회전했을 때 ViewModel을 사용하지 않으면 0으로 초기화됨

따라서 우리는 ViewModel을 사용해서 생명주기를 쉽게 관리할 수 있다!! 위의 구글 공식문서 사진처럼 계속해서 보존할 수 있다.

 

다음과 같이 ViewModel을 만들어보자!!

class MainViewModel : ViewModel(){

    var countValue = 0

    fun plus(){
        countValue++
        Log.d("MainViewModel", countValue.toString())
    }

    fun minus(){
        countValue--
        Log.d("MainViewModel", countValue.toString())
    }
}

확인을 위해 로그를 찍어보자!

다음 액티비티 클래스에서

lateinit var viewModel: MainViewModel
viewModel = ViewModelProvider(this).get(MainViewModel::class.java)
plusBtn.setOnClickListener{
            viewModel.plus()
            resultArea.text = viewModel.countValue.toString()
//            countValue++
//            resultArea.text = countValue.toString()
        }

추가해주면 끝!!! 화면을 돌려 onStop, onDestroy가 실행이 되어도 데이터는 여전히 유지되고 있음을 확인할 수 있다!!

 

 

 

GitHub - SsongSik/JetPack_Android_Practice: Android practice using the Jetpack library

Android practice using the Jetpack library. Contribute to SsongSik/JetPack_Android_Practice development by creating an account on GitHub.

github.com

 

저작자표시 (새창열림)

'Android > JETPACK' 카테고리의 다른 글

[JETPACK개론] ViewModelFactory  (0) 2022.08.16
[JETPACK개론] Activity/Fragment 의 ViewModel 공유  (0) 2022.08.12
[JETPACK개론] View,DataBinding + Adapter  (0) 2022.08.10
[JETPACK개론] DataBinding 과 data class  (0) 2022.07.26
[JETPACK개론] ViewBinding  (0) 2022.07.24
    'Android/JETPACK' 카테고리의 다른 글
    • [JETPACK개론] ViewModelFactory
    • [JETPACK개론] Activity/Fragment 의 ViewModel 공유
    • [JETPACK개론] View,DataBinding + Adapter
    • [JETPACK개론] DataBinding 과 data class
    쏭식
    쏭식

    티스토리툴바