왜이리 MVVM에 집착하는가?
다른 디자인 패턴도 많은데 왜 MVVM 패턴에만 집착하는가?
MVC 패턴은 간단하고 이해하기 쉬운 구조를 가지고 있지만 Controller의 부담이 커지기 쉽다는 단점이 있고, MVP 패턴은 View와 Presenter의 의존성이 높아진다는 단점이 있다. 물론 MVVM 패턴이 단점이 없는 것은 아니지만 MVC, MVP와 비교했을 때 MVVM이 제공하는 장점이 있기 때문에 많은 개발자들이 MVVM 패턴에 집착하는 것 같다.
내가 생각하는 MVVM의 장점은 아래와 같다.
1. 데이터 바인딩 : MVVM은 View와 ViewModel 간의 데이터 바인딩을 통해 자동으로 UI를 업데이트 한다. 데이터 바인딩을 통해 코드를 간결하게 유지하고, UI와 데이터의 동기화를 자동으로 처리한다.
2. 역할 분리 : View와 ViewModel 사이의 역할이 명확하게 분리되어 있어 코드의 구조가 명확해진다.
3. 유연성 : View와 ViewModel의 분리로 인해 새로운 기능의 추가나 변경에 쉽게 적응할 수 있다.
4. 학습 : 많은 개발자들이 MVVM 패턴을 추천하고 업계 전반에서 채택률이 높아짐에 따라 MVVM 패턴에 대한 다양한 정보를 쉽게 얻을 수 있다. 이는 학습과 직결되며 학습하는 입장에서는 큰 장점으로 다가온다.
데이터 바인딩
그럼 MVC와 MVP에서는 데이터 바인딩이 불가능할까? No! 가능은하다. 데이터 바인딩은 View와 데이터(모델) 간의 동기화를 자동으로 처리하는 기술이며, MVVM 패턴만이 데이터 바인딩을 지원하는 것은 아니다. 하지만 MVC와 MVP에서는 데이터 바인딩이 핵심 목표가 아니다.
MVC와 MVP에서 데이터 바인딩이 덜 강조되는 이유?
Controller나 Presenter가 View와 Model 간의 중간 역할을 하기 때문이지 않을까 싶다..! (짧은 내 생각이니 확실하진 않다.)
내 생각을 조금 더 풀어보자면, MVC, MVP, MVVM 세 가지 디자인 패턴의 가장 큰 차이점은 데이터 동기화의 방식인 것 같다.
MVC는 Controller가 View에서 발생한 이벤트를 처리하고, Model에서 데이터가 변경되면 Controller가 View를 업데이트한다. 즉, MVC에서의 데이터 동기화는 Controller가 View와 Model 사이의 데이터 흐름을 수동으로 제어하여 이루어진다. MVP는 Presenter가 View에서 발생한 이벤트를 처리하고, Model에서 데이터를 가져와 View를 업데이트한다. 마찬가지로 MVP에서의 데이터 동기화는 Presenter가 View와 Model 사이의 데이터 흐름을 수동으로 제어하여 이루어진다. 하지만 MVVM은 데이터 바인딩을 통해 View와 ViewModel 간의 데이터 동기화를 자동으로 처리한다.
요약하자면, MVC와 MVP에서는 Controller나 Presenter가 View와 Model 사이의 데이터 흐름을 수동으로 제어하여 데이터 동기화를 처리한다. 이는 View와 Model 간의 직접적인 상호작용을 피하고 중간 역항르 통해 데이터 흐름을 관리하기 위함이다. MVVM에서는 데이터 바인딩을 통해 View와 ViewModel 간의 데이터 동기화를 자동으로 처리한다.
MVVM 패턴의 철학과 목표
역할을 명확하게 분리하여 코드의 가독성과 유지보수성을 높이고, 데이터 바인딩을 통해 View와 ViewModel 간의 동기화를 자동화하여 생산성을 향상시키는 것이라고 생각한다.
MVVM을 채택해야하는 이유?
데이터 바인딩을 통한 자동 UI 업데이트, 역할 분리, 유연성 및 재사용성과 같은 큰 장점을 제공하기 때문이라고 생각한다. 물론 구조가 복잡하고 구현이 어렵다는 단점이 있기 때문에 작은 규모의 프로젝트 보다는 대규모 프로젝트에서 채택하면 좋을 것 같다. (프바프 !!)
'iOS > Design Pattern' 카테고리의 다른 글
[iOS/Design Pattern] Clean Architecture를 알아보자. (0) | 2024.08.26 |
---|---|
[iOS/Design Pattern] 코디네이터 패턴 (0) | 2024.08.02 |
[iOS/Design Pattern] MVVM 패턴 이해해보기 (0) | 2024.01.05 |
[iOS/Design Pattern] 예제로 알아보는 MVVM패턴 - 2 (0) | 2023.08.08 |
[iOS/Design Pattern] 예제로 알아보는 MVVM패턴 - 1 (0) | 2023.08.07 |