Kotlin/TIL

TIL (04.29) - LiveData 실습

내손은개발 🐾 2024. 4. 29. 21:04

Observer Pattern

  • LiveData를 공부하기 전에 옵져버 패턴에 대한 이해가 선행되어야 한다.
  • LiveData공식문서를 보면, "LiveData는 관찰자 패턴을 따릅니다. LiveData는 기본 데이터가 변경될 때 Observer 객체에 알립니다."라고 되어있기 때문이다.
  • 옵져버 패턴은 디자인 패턴 중 하나로, 감시자들이 한곳을 계속 바라보고 있는 패턴이다. 어떤 이벤트가 일어나면 이벤트를 관찰하던 관찰자들이 바로 반응하는 패턴이다.
  • 이런 옵져버 패턴을 가지지 않는다면 이벤트를 체크해야하는 오브젝트들은 이런 이벤트가 발생했는지 계에속 이벤트를 발생 여부를 확인해야 한다.
    • → 필요없는 리소스 낭비가 발생하고 이벤트 발생 감지를 놓치는 경우 발생
    • → 하지만 옵져버가 반응하니 바로 이벤트를 감지할 수 있다.
  • 이런 방법을 polling이라고 한다.
  • 3개의 중요한 구성요소가 있다.
    • 이벤트를 감지할 Observer 인터페이스 : 관찰자 역할을 하는 인터페이스는 메서드로 어떤 이벤트가 동작하는 함수인 update()를 가지고 있습니다.
    • Observer 인터페이스를 구현하는 실제 Observer class : update() 메서드를 가지기 때문에 이벤트가 일어났을 때 각 class별로 특정 동작을 정의할 수 있다.
    • Observer 인터페이스 구현체를 리스트로 가지고 있는 Class : 옵져버 인스턴스를 리스트에 추가해주기 위한 register(), 이벤트가 일어났을 때 소유하고 있는 옵져버들에게 update를 알리는 notifyUpdate()함수를 가지고 있다.

 

 

 

LiveData 실습

 

1. 먼저 observer 인터페이스 정의

관찰자(감시자) 역할을 하는 observer인터페이스는 내부 함수로 이벤트가 일어났을 때 동작할 update() 메서드를 가지고 있다.

interface Observer {
	fun update()
}

 

2.Observer를 상속받은 dog, cat는 각각 update()함수에서 야옹, 멍멍을 정의한다.

class Dog: Observer{
	override fun update(){
		println("멍멍")
	}
}

class Cat: Observer {
    override fun update() {
        println("야옹")
    }
}

 

3. 동물의 주인인 Owner는 내부에 ObserverList를 가지고 있고 ObserverList에 Observer를 추가하는 register()를 가지고 있다. 또한 가지고 있는 Observer들에게 update() 를 알리기 위한 notifyUpdate() 함수를 정의하고 있다.

class Owner {
    val observerList = mutableListOf<Observer>()

    fun register(observer:Observer){
        observerList.add(observer)
    }

   fun notifyUpdate(){
       for(observe in observerList){
           observe.update()
       }
   }
}

 

4. 이제 Owner, Dog, Cat 인스턴스들을 하나씩 만들고 Owner에게 register()로 Dog,Cat 관찰자를 등록한다.

fun main(){
    val owner=Owner()
    val dog=Dog()
    val cat=Cat()

    owner.register(dog) //옵져버 등록
    owner.register(cat) //옵져버 등록

    owner.notifyUpdate() //오너가 신호를 보냄 = 이벤트 발생
}
  • UI Controller인 Activity, Fragment는 Owner의 이벤트(ex)클릭 이벤트)를 받는다

 

 

 

 

ref

 

[안드로이드 공식문서 파헤치기] LiveData의 모든 것! - 1편(Observer Pattern, MutableLiveData)

Flow에 대해 공부하던 중 Flow와 LiveData를 비교하는 글들을 보게 되었습니다! Flow의 등장배경과 장단점에 대해 더 잘 이해하기 위해선 LiveData에 대해 지금보다 깊게 공부하고 완전히 제것으로 체화

velog.io

 

 

'Kotlin > TIL' 카테고리의 다른 글

Android -GoogleMap 사용 (TIL 05.01)  (0) 2024.05.01
SharedPreference (TIL 04.30)  (0) 2024.04.30
TIL (04.23)  (0) 2024.04.23
TIL (04.22)  (0) 2024.04.22
TIL(04.18)  (1) 2024.04.18