와챠의 우당탕탕 코딩 일기장

[Android] Android Architecture Components(AAC)/안드로이드 아키텍처 컴포넌트 - 2. LiveData 본문

코딩 일기장/Android(Kotlin)

[Android] Android Architecture Components(AAC)/안드로이드 아키텍처 컴포넌트 - 2. LiveData

minWachya 2022. 5. 29. 21:20
반응형
  1. Lifecycle (Easy handling lifecycles)
  2. LiveData (Lifecycle aware observable)
  3. ViewModel (Managing data in a lifecycle)
  4. Room (Object Mapping for SQLite)
  5. Paging (Gradually loading information)

2. LiveData

 

공식문서

 

LiveData 개요  |  Android 개발자  |  Android Developers

LiveData를 사용하여 수명 주기를 인식하는 방식으로 데이터를 처리합니다.

developer.android.com

 

LiveData이란 무엇인가?

LiveData는 생명주기와 데이터의 변경을 감지할 수 있는 클래스이다.

 

LiveData은 어떻게 사용하는가?

1. 특정 유형의 데이터를 보유할 LiveData의 인스턴스를 생성한다.

(ViewModel 클래스 상속)

아래 예에서는 현재 이름을 관리하기 위한 LiveData 인스턴스를 생성했다.

class NameViewModel : ViewModel() {

    // String 형식의 LiveData 생성
    // LiveData는 abstract class이기 때문에 LiveData Class를 상속받은 MutableLiveData를 사용
    val currentName: MutableLiveData<String> by lazy {
        MutableLiveData<String>()
    }

}

 

2. LivaDate를 관찰하는 Observer 객체를 만든다. + LiveData와 연결한다.

(Activity나 Fragment 같은 UI 컨트롤러에 Observer 객체를 만듦)

설명 주석

class NameActivity : AppCompatActivity() {

    // 'by viewModels()' 사용
    private val model: NameViewModel by viewModels()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // 1. ui 업데이트를 위한 observer 생성
        // Observer 객체는 onChanged() 메서드를 정의함
        val nameObserver = Observer<String> { newName ->
            // 2. ui 업데이트
            // 이 메서드는 새 이름을 받으면 ui를 업데이트하도록 정의됨
            nameTextView.text = newName
        }

		// 3. observe() 메서드를 사용하여 LiveData 객체에 Observer 객체를 연결함
        model.currentName.observe(this, nameObserver)
    }
}

 

3. 버튼 클릭 시 LiveData 객체 업데이트되도록 하기

LiveData의 .setValue(또는 .postValue)를 통해 observer를 호출하고,

observer애서 정의한 메서드대로 ui도 변경된다.

button.setOnClickListener {
    val anotherName = "John Doe"
    model.currentName.setValue(anotherName)
}

 

LiveData은 왜 쓰는가?(LiveData의 장점)

  • UI와 데이터 상태의 일치를 보장함
    • LiveData는 기본 데이터가 변경될 때 Observer 객체에 알림(Observer 패턴)
    • => 앱 데이터가 변경될 때마다 Observer가 대신 UI를 업데이트하게 하면 개발자가 업데이트할 필요가 없음
  • 메모리 누수 없음
    • Observer는 Lifecycle 객체에 연결되어 있으며, 연결된 수명 주기가 끝나면 자동으로 삭제됨
  • 중지된 활동으로 인한 비정상 종료 없음
    • Observer의 수명 주기가 비활성 상태에 있으면 Observer는 어떤 LiveData 이벤트도 받지 않음
  • 수명 주기를 자동으로 관리함
    • UI 구성요소는 관련 데이터를 관찰하기만 할 뿐 관찰을 중지하거나 다시 시작하지 않음
    • LiveData는 관찰하는 동안 관련 수명 주기 상태의 변경을 인식하므로 이 모든 것을 자동으로 관리함
  • 최신 데이터 유지
    • 수명 주기가 비활성화되면 다시 활성화될 때 최신 데이터를 수신함
    • ex) 백그라운드에 있었던 활동은 포그라운드로 돌아온 직후 최신 데이터를 받음
  • 적절한 구성 변경
    • 기기 회전과 같은 변경으로 인해 Activity 또는 Fragment가 다시 생성되면 사용 가능한 최신 데이터를 즉시 받게 됨
  • 리소스 공유
    • 앱에서 시스템 서비스를 공유할 수 있도록 싱글톤 패턴을 사용하는 LiveData 객체를 확장하여 시스템 서비스를 래핑할 수 있음
    • LiveData 객체가 시스템 서비스에 한 번 연결되면 리소스가 필요한 모든 Observer가 LiveData 객체를 볼 수 있음

 

LiveData는 언제 많이 사용되는가?

 Api 응답

프래그먼트 간의 데이터 교환

데이터 통일성 유지가 필요할 때

 


담에 서버에서 데이터 주고받을 때 함 써봐야지

 

참고

https://hyuncb.tistory.com/4?category=627854

 

안드로이드 아키텍쳐 컴포넌트(Android Architecture Components) - 3부

오늘은 LiveData를 알아보자. LiveData? 데이터를 가지고 있고, 데이터의 변경을 감지할 수 있는 클래스 끝이다. 필자는 Api 응답이나, 프래그먼트 간의 데이터 교환, 데이터 통일성 유지를 위해 많이

hyuncb.tistory.com

https://dev-imaec.tistory.com/39

 

[LiveData] 안드로이드 LiveData 기본 사용법 - 기본 예제

안드로이드 LiveData 기본 사용법 알아보기 - 기본 예제  오늘은 Android JetPack 중 하나인 LiveData에 대해 알아보도록 하겠습니다. LiveData는 Activity, Fragment 등의 LifeCycle을 인식하여 LifeCycle 내에..

dev-imaec.tistory.com

https://todaycode.tistory.com/49

 

LiveData(라이브 데이터)란?

1. LiveData란?  1-1. Observer  1-2. LiveData  1-3. LiveData의 장점 2. 사용법  2-1. gradle  2-2. LiveData 객체 생성  2-3. Observer 객체 생성 3. 예제 4. 더 알아보기  3-1. LifeCycleOwner  3-2...

todaycode.tistory.com

 

 

반응형
Comments