목적은 하나
목적 : 비즈니스 로직과 UI를 명확히 분리하여 유지보수성과 테스트 용이성을 높인다.

View
- 사용자 입력을 ViewModel로 전달하고
- ViewModel의 상태(State, LiveData)를 관찰하여 UI를 갱신
View Model
- View와 Model 사이의 중간 계층
- UI 로직과 상태(State)를 관리
- View의 생명주기에 영향을 받지 않음 (Configuration 변경에도 데이터 유지)
Model
- 비즈니스 로직과 데이터 관리 담당 담당
- Repository, DAO, Retrofit 등 실제 데이터 소스와의 연결
ViewModel
- View에 표시할 데이터를 보관하고 관리하는 역할
- View가 파괴되어도(Activity 재생성 등) 데이터가 유지됨
- Coroutine과 함께 사용하면 비동기 처리에 안전
- 생명주기 범위를 자동 관리 (viewModelScope 제공)

LiveData
- Lifecycle을 인식하는 Observable 데이터 홀더
- View가 활성 상태(STARTED, RESUMED) 일 때만 데이터 업데이트
- 화면 회전, 다크모드 변경 등 구성 변경 시에도 데이터 유지
메모리 관리 자동화
→ LifecycleOwner가 Destroy되면 자동으로 Observer 해제
UI 상태 보존
→ ViewModel + LiveData 조합으로 구성 변경에도 데이터 유지
코드 단순화
→ 수동적인 UI 업데이트 코드를 줄이고, 상태 기반 UI 구현 가능