개요
MVC 패턴에 익숙해져 있는데, 요즘 MVVM 패턴이 많이 사용되는것 같아서 정리하게 되었습니다.
MVC (Model-View-Controller)
MVC 패턴은 Model, View, Controller을 나눠 개발하는 디자인 패턴입니다. Django, Spring 등 다양한 프레임워크에서 널리 사용되었습니다.
Model
- 어플리케이션의 데이터 로직을 담당합니다.
- View와 Controller에 대해 직접적으로 알지 않고, 데이터만 담당합니다.
View
- 사용자에게 보여지는 화면(View)입니다.
- 데이터를 보여주는 역할만 하며, 비즈니스 로직을 포함하지 않습니다.
Controller
- 사용자의 입력(Action)을 받아 처리합니다.
- 사용자의 입력에 따른 데이터 변경, 데이터 가져오기와 같은 데이터 처리 후, 데이터를 바탕으로 사용자에게 보여질 View를 결정합니다.
MVC 흐름 예시
- 사용자가 버튼을 클릭합니다.
- Controller가 클릭을 감지하고 Model에게 데이터 갱신을 요청합니다.
- Model이 데이터 상태를 변경하고 변경 후 데이터를 알립니다.
- Controller가 변경된 데이터를 View의 update를 호출합니다.
- View는 바뀐 화면을 보여줍니다.
MVC 장단점
장점
- 구조가 단순하고 직관적입니다.
- 기능별로 코드를 분리해서 가독성과 코드 재사용성이 좋아집니다.
단점
- View와 Model 사이의 의존성이 높습니다.
- 앱이 복잡해질수록 Controller가 거대해지는 문제가 있습니다.
MVVM (Model-View-ViewModel)
MVVM은 MVC의 단점을 개선하기 위해 등장한 방법입니다. Android, IOS 등 다양한 프레임워크에서 채택하고 있는 디자인 패턴입니다.
Model
MVC의 Model과 동일하게 데이터 로직을 담당합니다.
View
MVC의 View 처럼 사용자에게 보여지는 화면을 담당합니다.
ViewModel
MVVM의 핵심입니다.
MVC에 존재하던 Controller를 대채하는 부분입니다.
View를 표현하기 위해 만들어진 Model입니다.
ViewModel은 관찰이 가능한(Obserable) 데이터를 제공하고, View는 데이터를 관찰하다가 변경되면 스스로 업데이트 합니다.
MVVM 흐름 예시
- 사용자가 버튼을 클릭합니다.
- View는 이 명령을 ViewModel에 전달합니다.
- ViewModel은 필요한 로직을 처리 후 Model을 변경합니다.
- Model이 변경되며 ViewModel의 데이터가 갱신됩니다.
- View는 관찰하던 데이터의 변경을 감지하고 화면을 갱신합니다.
MVVM의 장단점
장점
- View와 Model을 독립적으로 만들 수 있습니다.
- 독립성 유지 덕분에 효율적인 테스트코드 작성이 가능합니다.
단점
- 설계가 어렵습니다.

