본문 바로가기
iOS/Architecture

MVVM 곰튀김님 따라하기

by hong7 2024. 7. 14.

Data

🔴 서버에서 가져온 데이터 JSON

 

🔴 사용할 데이터 String

 

🔴 UtcTimeModel


MVC

 


MVVM

🟠 서버로 부터 온 데이터 Entity

 

🟠 Entity를 가져오는 Repository 

서버로 부터 온 데이터(Entity)인 UtcTimModel을 전달

 

🟠 Repository를 사용하는 Service 

서버모델(Entity)을 로직에서 사용하는 Model로 바꿔줌

필요없는 것 다 빼고 Entity에서 필요한 것만 뽑아서 Model로 변형

 

🟠 이 앱에서 사용하는 Model 

서버에서는 JSON의 String으로 왔지만,

Service에서는 Date타입으로 가지고 있음

 

🟠 ViewModel 

화면에서 보여줘야될 값은 String 하나임

Logic에서는 Date 타입으로 뭔가를 처리하지만,

ViewModel 에서는 String값이 필요함

Service를 사용해서 가져온 값을 화면에서 보여줄수있는 형태로 변형

 

🟠 화면을 보여주는 View ViewController 

화면에 보여질 모든 데이터 형태가 ViewModel에 있기때문에

ViewModel만 바라보면서 데이터가 변경이 되면 그걸 가지고 화면에 세팅하는 처리만 하면 됨

어떤 이벤트가 발생하면 이벤트를 ViewModel에게 넘기면서 이벤트에 대한 적절한 값변경을 요청

여기서 ViewModel은 이벤트에 대한 적절한 값변경을 일으키는데..

그 로직은 뷰모델에서 하는 것이 아니라 Service에서 일어남..

서비스는 이 앱의 핵심 비즈니스 로직이기 때문..


RxSwift 로 변형

Rx는 콜백을 받기 위해서 사용한 것 뿐


MVVM

View는 ViewModel에 의존

ViewModel은 Data를 바꾸기만 함

바꾼 Data를 그려내는 것은 View가 알아서 해! (계속 모니터링하다가 Data가 바뀌면 알아서 바꿔라)

바뀐 시점을 알려주는 것은 onUpdated 같은 콜백이나 RxSwift 같은 툴을 써서 리액티브하게 만들면 됨

MVVM에서 가장 중요한 것은 ⭐️ 의존관계를 어떻게 가지고 있느냐! ⭐️

Model은 3가지 종류가 있음

 원천 데이터: Entity

 원천 데이터로부터 서비스 로직에서 사용되는 근본 데이터: Model

 근본 데이터를 화면에 보여지게 하는 데이터: ViewModel

 그것을 처리하는 로직을 담당하는게 Service, Repository

MVP

ViewModel이 View야 너가 이걸 그려라 화살표의 방향이 일관성이 깨짐

MVC


출처:

GitHub - iamchiwon/mvvm_final: MVVM 종결 예제

[SUB] 도대체 어떻게 하는 것이 MVVM 인것이냐? 오늘 결론 내립니다.