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

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

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

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
쏭식

Ssongcode;

[Android] ViewModel, LiveData
Android/Basic

[Android] ViewModel, LiveData

2022. 4. 27. 23:59

ViewModel ?

-MVVM 패턴에서 수명주기를 고려하여 데이터를 저장하고 관리한다.

-ViewModel 객체는 다른 activity나 fragment에서도 사용할 수 있다. 

위 그림은 뷰 모델의 생명주기이다.

 

위의 그림과 같이 액티비티가 시작되고, 종료될 때 까지 뷰모델은 유지된다.

안에서 프래그먼트가 생성되고, 다른 프래그먼트로 옮겨진다고 한들 액티비티가 살아있는 동안에는 뷰모델도 살아있다!

 

즉, ViewModel은 생명주기의 영향을 받지 않고 데이터를 유지, 보관하기 위해 사용한다고 볼 수 있다!

LiveData ?

-보통 ViewModel과 같이 사용되며, observer패턴을 구현하기 위하여 사용된다.

-관찰 가능한 일반 클래스와 달리 LiveData는 수명 주기를 인식한다.

 

실습

실습하기전 ViewModel을 사용해주기 위한 dependencies에 추가해준다.

//viewModel
def lifecycle_version = "2.5.0-alpha05"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
// LiveData
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"

입력하는 값이 계속해서 라이브로 변화하는 것을 확인하려고 할 때 사용되기도 하지만,

회원가입처럼 뷰가 달라지면서 데이터를 서로 주고받아야 하는 상황에서도 많이 사용된다.

class SignUpViewModel : ViewModel() {

    companion object{
        const val TAG: String = "로그"
    }
    private val _currentInputId = MutableLiveData<String>("")
    val currentInputId: LiveData<String> = _currentInputId

    private val _currentInputPw = MutableLiveData<String>("")
    val currentInputPw: LiveData<String> = _currentInputPw

    private val _currentInputPhone = MutableLiveData<String>("")
    val currentInputPhone: LiveData<String> = _currentInputPhone

    private val _currentInputNickname = MutableLiveData<String>("")
    val currentInputNickname: LiveData<String> = _currentInputNickname

    fun updateInputId(input: String){
        _currentInputId.value = input
    }

이렇게 ViewModel을 선언해주고, 공유할 데이터(객체)를 적어준다.

private val sharedViewModel : SignUpViewModel by activityViewModels()
sharedViewModel.updateInputId(newId)
sharedViewModel.updateInputPw(newPw)

ViewModel을 사용할 프래그먼트에서 선언해주고,

회원가입에 사용될 아이디하고 비밀번호를 입력한 값을 업데이트 한 뒤 다음화면으로 넘어간다

이렇게 되면 다음 뷰에서도 아이디하고 비밀번호를 사용할 수 있게 된다!!

sharedViewModel.currentInputId.observe(viewLifecycleOwner) { currentInputId ->
    requestUserData.userId = currentInputId
}

회원가입의 마지막 뷰에서 서버에게 요청할 때 뷰모델을 불러와

뷰모델에 저장되어 있는 id값을 요청할 데이터 id값에 저장만하면 끝!!

처음 입력받았던 id와 pw값을 마지막 뷰에서 사용할 수 있게 되었다!!!!!!!!!!!

 

어찌어찌해서 여러 자료를 찾아보다가 구현하기는 했지만

뷰모델 관련해서 공부하다가 생명주기라는 것을 알게되었고, 아직 나에겐 좀 어려운 개념같다.........

 

저작자표시 (새창열림)

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

[Android] RecyclerView (2)  (0) 2022.04.29
[Android] RecyclerView  (0) 2022.04.28
[Android] Retrofit2 사용하기  (0) 2022.04.26
[Android] UnknownServiceException:CLEARTEXT communication to **** not permitted ....Error  (0) 2022.04.25
[Android] Splash 화면 만들기  (0) 2022.04.24
    'Android/Basic' 카테고리의 다른 글
    • [Android] RecyclerView (2)
    • [Android] RecyclerView
    • [Android] Retrofit2 사용하기
    • [Android] UnknownServiceException:CLEARTEXT communication to **** not permitted ....Error
    쏭식
    쏭식

    티스토리툴바