MVVM 패턴은 웹, 앱과 같은 유저 인터페이스를 통한 **이벤트 기반 프로그래밍**을 잘 할 수 있도록 고안된 아키텍처 패턴 중 하나입니다. 이 패턴은 기존의 MVC, MVP, VIPER, RIBs와 같은 아키텍처 패턴의 문제점과 한계를 해결하기 위해 탄생했습니다.
MVC에서 파생된, Model과 View 간의 의존성뿐만 아니라 Controller와 View 간의 의존성도 고려하여 각 구성 요소가 독립적으로 작성되고 테스트될 수 있도록 설계된 아키텍처 패턴
1) 구조
- Model : 어플리케이션에서 사용되는 데이터와 그 데이터를 처리하는 부분입니다.
- View : 사용자에서 보여지는 UI 부분입니다.
- View Model : View를 표현하기 위해 만든 View를 위한 Model입니다. View를 나타내 주기 위한 Model이자 View를 나타내기 위한 데이터 처리를 하는 부분입니다.
2) 동작
MVVM 패턴의 동작 순서는 아래와 같습니다.
- 사용자의 Action들은 View를 통해 들어오게 됩니다.
- View에 Action이 들어오면, Command 패턴으로 View Model에 Action을 전달합니다.
- View Model은 Model에게 데이터를 요청합니다.
- Model은 View Model에게 요청받은 데이터를 응답합니다.
- View Model은 응답 받은 데이터를 가공하여 저장합니다.
- View는 View Model과 Data Binding하여 화면을 나타냅니다.
3) 특징
MVVM 패턴은 Command 패턴과 Data Binding 두 가지 패턴을 사용하여 구현되었습니다.
Command 패턴과 Data Binding을 이용하여 View와 View Model 사이의 의존성을 없앴습니다.
View Model과 View는 1:n 관계입니다.
4) 장점
MVVM 패턴은 View와 Model 사이의 의존성이 없습니다. 또한 Command 패턴과 Data Binding을 사용하여 View와 View Model 사이의 의존성 또한 없앤 디자인패턴입니다. 각각의 부분은 독립적이기 때문에 모듈화 하여 개발할 수 있습니다.
5) 단점
간단한 UI에서 오히려 ViewModel을 설계하는 어려움이 있을 수 있다.
복잡해질수록 ViewModel이 빠르게 비대해진다.
표준화된 틀이 존재하지 않아 사람마다 이해가 다르다.
비동기 프로그래밍은 여전히 디버그가 어렵고, 성능 부하도 많이 발생할 수 있습니다.
DataBinding
데이터 바인딩은 쉽게 말해 Model과 UI 요소 간의 싱크를 맞춰주는 것이라 할 수 있다.
이 패턴을 통해 View와 로직이 분리되어 있어도 한 쪽이 바뀌면 다른 쪽도 업데이트가 이루어져 데이터의 일관성을 유지할 수 있다.
ios에서 데이터 바인딩을 하는 방법은 다음과 같다.
- KVO
- Delegation
- Functional Reactive Programming
- Property Observer
참조
https://dev-leeyang.tistory.com/21
MVC, MVVM, MVP, VIPER, VIP를 알아봅시다.
안녕하세요. 리양입니다 :) 요즘 코로나로 전국적으로 이슈네여 ㅠ ㅠ 다들 몸 조심하시길 바랍니다. 요즘은 패턴에 대해 공부를 하기 시작했어여. 어떻게 layer를 좀 더 잘 나누어서 각 역할을 수
dev-leeyang.tistory.com
[디자인패턴] MVC, MVP, MVVM 비교
웹 개발자로 일을 하면서 가장 먼저 접한 디자인패턴이 바로 MVC 패턴이었습니다. 그만큼 유명하고 많이 쓰이는 디자인패턴인 MVC 패턴과 MVC 패턴에서 파생되어져 나온 MVP 패턴과 MVVM 패턴을 이야
beomy.tistory.com
https://eeyatho.tistory.com/77
Swift ) MVVM 탄생과정, 특징 - EEYatHo iOS
MVVM을 제대로 이해하기 위해서는, MVVM이 나오는 이유와 배경을 알아야한다고 생각한다. MVVM은 디자인 패턴이다. 디자인 패턴은 어쩌다 나온 것인지를 알기 위해서는, 프로그래밍 패러다임의 변
eeyatho.tistory.com
'Architectural Pattern' 카테고리의 다른 글
내장 DB(CoreData)와 외부 DB(FireStore) 모두 프로젝트에 적용한 이유와 마주했던 문제점들 (0) | 2023.03.12 |
---|