iOS

iOS 에서의 MVC, MVP, MVVM 변천사 간단 정리 - iOS

나른한코딩 2022. 5. 5. 18:25
MVC




애플의 MVC

apple의 MVC

  • View : 일관성 있는 앱의 느낌을 유저에게 전달하기 위해선 높은 재사용성이 필요하다
  • Model : 도메인 관련 데이터를 캡슐화하기 때문에, 같은 형태의 데이터를 다른 곳에서 또 쓰는 경우가 많으므로 또한 높은 재사용성이 필요하다

→ View, Model을 서로 떨어뜨려 의존성을 없애고 높은 재사용 성을 취함.
애플이 원하던 대로 View와 Model은 서로 모르게 되었으나, 대규모 협업에서 Controller의 역할이 비대해졌다.

  • 레이아웃 코드
  • 유저 입력 프로세싱
  • 비즈니스 로직
  • 데이터 변환
  • 화면 전환
  • 생명주기
  • 콜벡처리
  • 네트워크 통신

→ 이렇게 Massive View Controller 를 해결하기 위해 Controller의 역할을 덜은 MVP 가 나타나게 되었다.




MVP

MVP


: 마틴 파울러가 발표한 개념이다.
VC에서는 생명주기, 화면전환, 콜백 처리 등 꼭 VC에서 처리해야하는 것들만 처리하게 놔두고, 나머지는 모두 Presenter로 위임함.

  • ViewController → View취급
  • Model 그대로
  • Presenter → 중계자 역할로 추가

Presenter가 View를 업데이트하는 방식에서,
View를 업데이트하는 소스가 대부분 Presenter에 있게 되면서 View가 하는 역할이 거의 없어짐.
→ 즉, Presenter와 View 간의 높은 의존성이 생겨버린 것.


이를 개선한 것이 MVVM 이다.



MVVM

: MVP가 나오고 한 1년 정도 후에 발표된 개념.

  • 중계자 Presenter → ViewModel 로 바꿈

View를 업데이트하는 코드 → View가 가지고 있고
이 코드들의 트리거역할을 하기 위해 Data Binding으로 ViewModel과 연결

Q. MVP와 가장큰 차이점은?

→ View와 비즈니스 로직이 분리되었다는 것!
(때문에 테스트 UITest와 UnitTest로 분리 가능)
프로토콜과 함수들을 bind로 끝내기에,,

  • View와 ViewModel 사이의 의존성도 낮아지고
  • 코드량도 줄음

단, 비동기 프로그래밍은 디버그가 어렵고, 성능부하가 많다는 단점.
규모가 커질수록 ViewModel 역시 비대해지는 경향은 있음.



언제 무엇을 사용할까??


간단한 개인 프로젝트 MVC로 작성하고,
현업이나 대규모 프로젝트의 경우는 명확한 역할분리를 한다면 MVVM이 좋을 것같다.








참고 링크

반응형