
어떤 객체(Subject)의 상태가 변하면, 그 변화를 감지한 다른 객체들(Observer)이 자동으로 반응하도록 하는 구조.
대표적인 예로 LiveData를 사용할 때 다음과 같이 구현한다:
liveData.observe(viewLifecycleOwner) { value ->
textView.text = value
}
liveData가 변화하면 Observer로 등록된 UI가 반응한다.Jetpack Compose는 선언형 UI 방식으로 동작하며, 상태가 변경되면 자동으로 필요한 UI만 다시 그리는 자동 리컴포지션 구조를 갖고 있다.
val text by viewModel.name.collectAsState()
Text(text = text)
text가 바뀌면 해당 Text() 컴포저블만 다시 그려진다.| 항목 | LiveData/XML | Jetpack Compose |
|---|---|---|
| 옵저버 등록 방식 | 수동 (observe 호출) | 자동 추적 및 리컴포지션 |
| 생명주기 고려 | 필요 (LifecycleOwner 등) | 거의 신경 쓰지 않아도 됨 |
| UI 방식 | 명령형 (imperative) | 선언형 (declarative) |
| 상태 반영 방식 | 명시적 호출 | 자동 상태 추적 및 UI 갱신 |
Compose는 전통적인 옵저버 패턴을 더 선언적이고 직관적인 방식으로 발전시킨 구조다.
명시적인 옵저버 등록 없이도 상태만 선언해두면 자동으로 UI가 반응한다는 점에서, 간결하면서도 오류 가능성이 적은 개발 경험을 제공한다.