-
[Architecture] MVVM에 대해서 알아보기iOS 2021. 12. 28. 23:23
Model
어플리케이션이
무엇
을 할지를 담고있다.- UI와 완전히 독립적이다. -> Model 파일에서는 UIKit이나 SwiftUI를 import하지 않는다.
- Data와 Logic을 다룬다.
View
어플리케이션이
어떻게
보여질지를 담고있다.Stateless
가끔 View의 여러가지 테마중 어떤 테마인지에 따라서 View의 모습이 바뀌는 등 State에 종속적인 부분도 있다고 생각할 수 있다.
하지만 그것은 어플리케이션의Logic
과는 아무 상관이 없다.Declarative
코드에 있는 View가 모두 그려지고 나면 더 이상 바뀌지 않는다.
바꾸고 싶다면 다시 그려야 한다.
✔️ View의 `Declarative`에는 장점이 있다.
code를 작성할 때 UI가 어떻게 생길지 쉽게 상상할 수 있고,
마찬가지 이유로 쉽게 읽을 수 있다.
의도에 맞게 작성할 수 있다.Reactive
항상 Model의 현재 상태를 즉각적으로 반영한다.
ViewModel을 통해서 구현된다.
ViewModel
View
와Model
을 결합하는 역할을 한다.- Interpreter
View
가 원하는것을 읽고 필요한 작업을 수행해서Model
에 적용하는 느낌이 Interpreter와 같다.Model
은 단순히 구조를 담고있고,View
는 declarative를 갖기 위해서 간단하게 구현되고 싶다.
Model
->ViewModel
- Model은 변경사항이 발생하면 ViewModel에게 알린다.
ViewModel
->View
- Model의 변경사항을 알게 된 메커니즘과
다른
방식으로 View와 소통한다.
Model의 변경사항을 전 세계에 공표한다. 변경사항을 직접 전달하지 않는다.
그 어떤 View에도 연결되어있지 않고, 어떤 View에 해당 변경사항이 전달되는지 모르고 그저 허공에 말할 뿐이다.
그렇기에전 세계
라는 표현을 쓴 것이다.
- ViewModel의 발표를 듣기 위해서는, 다른 무언가가 일을 하는게 아닌
View
가 해당 viewModel을subscribe
해야한다.
티비에서 수십개의 채널 중 보고싶은것을 선택하는시청자
와 같은 느낌이다.
즉, 어떤 정보를 얻어올것인가는 View가 정하는 것이다.
View -> ViewModel
* 사용자의 의도를 구현한 Method를 실행해서 의도를 ViewModel에게 전달한다
ViewModel -> Model
* 의도에 알맞게 Model을 수정한다.
✔️ 예시) 여행을 위해서 호텔과 항공편에 대한 정보를 주는 어플리케이션.
사용자의 의도는 항공편 예매내역을 확인하는것이지, 서버에 접속해 해당 ID의 이전 예약을 확인하고 데이터 구조에 전달해서 처리하고 등등이 아니다.
View는 단순히 사용자의 의도에 맞춰서 ViewModel의 함수(예를들어 예매내역조회)를 호출한다.
그러고 그 나머지 일은 ViewModel이 하는것이다. View와 Model간의 소통을 가능하게 해 준다.'iOS' 카테고리의 다른 글
[MVVM 연습 프로젝트][Lotto](1) - MVVM으로 리펙토링 (0) 2021.12.30 [MVVM 연습 프로젝트][Lotto](0) - MVC로 만들어보기 (0) 2021.12.28 [맥주] 맥주 추천 어플 만들기(0) - 준비 (0) 2021.12.23 [TMDB] CollectionView 레이아웃 만들기 (0) 2021.12.23 [TMDB] API를 활용해 드라마 검색 어플 만들기 - 준비 (0) 2021.12.22 - UI와 완전히 독립적이다. -> Model 파일에서는 UIKit이나 SwiftUI를 import하지 않는다.