AOS

[Android] LiveData 와 Observer Pattern

유랄라- 2023. 3. 20. 21:53
반응형

LiveData는 관찰 가능한 데이터 홀더 클래스이다. 관찰 가능한 일반클래스와 다르게 LiveData는 생명주기를 인식한다.

LiveData 의 장점

- UI와 데이터 상태 일치 

LiveData는 Observer 패턴을 따른다. 기본 데이터가 변경될 때 Observer 객체에게 알린다. 그래서 앱 데이터가 변경될 때 마다 Observer(관찰자) 가 UI를 업데이트한다.

< Observer Pattern 이전글> 

2023.03.20 - [Book/헤드퍼스트 디자인패턴] - [Design Pattern] Observer Pattern/옵저버 패턴

 

[Design Pattern] Observer Pattern/옵저버 패턴

[헤드퍼스트 디자인 패턴] 책을 읽으며 정리한 글입니다 옵저버 패턴 ( Observer Pattern ) 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체에게 연락이 가고 자동으로 내용이 갱신되는 방식으

tral-lalala.tistory.com

- 메모리 누수 없음 

Observer는 Lifecycle 객체에 결합되어 있어 수명주기가 끝나면 자동으로 삭제된다. 

- Activity가 멈췄을 때 crash 없음 

Observer의 LifeCycle이 비활성상태이면 LiveData 이벤트도 받지 않음.

- LifeCycle을 수동으로 처리하지 않음 

- 항상 최신 데이터를 유지함

 

LiveData 예시

1. ViewModel에 LiveData 객체 만들기

@HiltViewModel
class UserViewModel @Inject constructor(
    private val userRepository: UserRepository,
) : ViewModel() {
    private val TAG = javaClass.name

    private val _userName =  MutableLiveData<String>()
    val userName : LiveData<String> = _userName
    
    
    ...
    
}

2. View에서 LiveData객체 관찰

@AndroidEntryPoint
class MyFragment : Fragment() {
    private val viewModel: MyViewModel by viewModels()
    private lateinit var binding : FragmentMyBinding

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

    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        binding = FragmentMyBinding.inflate(layoutInflater)
        
        initObservers()
        
        return binding.root
    }

    // Observe the LiveData, passing in this activity as the LifecycleOwner and the observer.
    private fun initObservers(){
        viewModel.userName.observe(viewLifecycleOwner, Observer{
            // Create the observer which updates the UI.
            binding.userName.text = it
        })
    }

    override fun onResume() {
        super.onResume()
        viewModel.getUserData()
    }
}

 

정리

  • LiveData는 데이터를 관찰할 수 있도록 해줌. (옵저버 패턴)
  • ViewModel에서 LiveData객체를 만들어 데이터를 가지고 있고, View에서 해당 LiveData를 관찰하고 있으면, 데이터의 상태가 바뀌면 구독하고 있던 View에게 연락이 가서 UI가 업데이트 된다.
  • LiveData는 생명주기를 인식한다. 즉 Observer의 생명주기 상태를 알고 있다. 그래서 생명 주기 상태에 있는 Observer에게만 업데이트한다.

 

 

참고)

https://developer.android.com/topic/libraries/architecture/livedata?hl=ko 

 

LiveData 개요  |  Android 개발자  |  Android Developers

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

developer.android.com

반응형