본문 바로가기
공부/스위프트

[스위프트] MVVM 패턴

by 초코팅촉 2023. 10. 17.
728x90

기존의 MVC패턴

MVVM패턴은 앞서 나왔던 MVC패턴과 같은 디자인 패턴의 한 종류이다.

 

우리가 앞서 알아봤던 MVC패턴은

Model(데이터), View(화면), Controller(제어)

이렇게 세가지의 구성으로 이루어져 있다.

 

하지만 실제로 작성해보면서 알겠지만 model을 제외한

view와 controller가 한개의 파일안에서 전부 이루어지고,

또한 이 둘이 매우 긴밀하게 접해있다.

(물론 최대한 안그렇게 작성할 수 있겠다만 대부분은 둘이 서로 이미 어떻게 동작하는지 아는 것처럼 작성이 된다.)

 

그렇다 보니 MVC패턴은 controller가 덩치가 커지게 되고(데이터 받아오랴, 뷰 뿌려주랴, 내부 로직 돌리랴..)

Massive View Controller라는 별명까지 생기게 된다.

실제로는 이렇게 구현된다.

그래서 이를 개선하고자 나온것이 MVVM패턴이다.

 

MVVM패턴

MVVM패턴도 약자인데 풀자면 Model, View, ViewModel 이다.

여기서 Model과 View는 이전에 봤던 각자의 역할 그대로 가져간다. 하지만 새로운 존재가 있다.

바로 View Model이다. 우선 구조를 보자.

이것이 MVVM.

사실 위에 나온 MVC패턴과 크게 다를바가 없어보이지만

중간에 ViewModel이 껴들어서 중재해주고 있다는게 가장 큰 차이점이고 핵심이다.

 

우선 데이터를 갖고있는 Model은 그냥 그대로 둔다.

그리고 기존의 View와 View Controller를 하나로 묶어 그냥 View레이어로 본다.

대신 전에 View Controller가 하던일을 분리해서 오직 View를 띄워주기만 한다.

 

여기서 기존에 View Controller가 하던 수많은 일들(각종 내부 로직들)을 View Model이라는 것으로 분리시킨다.

심지어 예를들어 View에 Label이 있다면 이를 위해 String으로 데이터 타입을 바꿔주는 일 조차도 전부 View Model에서 한다.

 

정리하면

1. Model에서 데이터를 받아와 가공해 전달

2. 네트워크같은 각종 로직들을 직접 수행

3. View에서 입력이 생기면 입력을 전달받아 해당 입력에 따른 로직도 수행

 

하지만 이렇게 분리를 해서 당연히 단점이 생긴다. 하지만 장점도 분명히 생기니 장단점 둘다 알아보자.

 

장점

1. 중간에서 View Model이 중재를 해주니까 에러가 생기거나 변경사항이 생기면 수정을 최소화 할 수 있다.

2. View와 View Model의 분리덕에 개발자와 디자이너가 병렬적으로 동시에 제작할 수 있다.

 

단점

1. 복잡하고 큰 앱을 위해 만들어진 만큼 소형앱에서 사용될경우 오버헤드가 커진다.

2. 너무 커지면 데이터 바인딩으로 인해 메모리 사용량이 늘어난다.

3. 복잡해지면 어짜피 전에 Controller가 커지던것처럼 View Model이 커진다.

 

 

 

swift - MVVC 패턴