디자인 패턴(MVC, MVP, MVVM)

유재우·2023년 9월 27일
0

iOS Developer의 길!

목록 보기
15/15

그동안 정말 많이 듣고보고 익숙하게 사용은 하고 있지만 정확이 어떤 개념인지는 모르고있는 디자인 패턴에 대해서 정리를 해보겠습니다.

우선 디자인 패턴이란?

기존 환경 내에서 반복적으로 일어나는 문제들을 어떻게 풀어나갈 것인가에 대한 일종의 솔루션 같은 것

제가 느낀 디자인 패턴은 일종의 코드의 조립설명서 같은 느낌입니다.
레고나 프라모델 조립을 하기 전에 조립설명서를 보지않고 하면 완성품까지 가는 시간도 오래걸리고 완성했더라도 기능이 제대로 작동할거란 보장도 없습니다. 그래서 이를 방지하기 위해 조립설명서를 보고 조립을 합니다.

코드 또한 똑같습니다.
시간도 단축하고 협업하는 개발자들끼리 디자인패턴을 얘기를 맞추고 개발을 하면 불필요한 시간을 단축시켜주고 효율적으로 개발을 할 수 있습니다.

그래서 이 수많은 디자인 패턴 중에서 가장 대표격인 MVC MVP MVVM 이 세가지 디자인 패턴에 대해서 알아보려합니다.

MVC

Model + View + Controller

구조

  • Model: 어플리케이션에서 사용되어지는 데이터 와 그 데이터를 처리하는 부분
  • View: 사용자에게 보여지는 UI 부분
  • Controller: 사용자의 입력(Action)을 받고 처리하는 부분

동작

  1. 사용자의 입력(Action)을 Controller가 감지
  2. Controller는 사용자의 Action을 확인하고 Model을 업데이트
  3. ControllerModel을 나타낼 View를 선택
  4. ViewModel을 이용해 화면에 나타냄

특징

  1. Controller는 여러개의 View를 선택할 수 있는 1:n 구조
  2. ControllerView를 선택할 뿐 직접 업데이트를 하지 않음(ViewController를 알수 없음)

장점

널리 사용되고 있는 패턴이라 가장 단순함

단점

ViewModel 사이의 의존성이 높음
어플리케이션이 커질수록 복잡하고 유지보수가 어려울 수 있음


MVP

Model + View + Presenter

구조

  • Model: 어플리케이션에서 사용되는 데이터와 그 데이터를 처리하는 부분
  • View: 사용자에게 보여지는 UI 부분
  • Presenter: View에서 요청한 정보로 Model을 가공하여 View에 전달해주는 부분

동작

  1. 사용자의 Action들은 View를 통해 들어옴
  2. View는 데이터를 Presenter에 요청
  3. PresenterModel에게 데이터를 요청
  4. ModelPresenter에서 요청받은 데이터를 응답
  5. PresenterView에게 데이터를 응답
  6. View는 Presenter가 응답한 데이터를 이용해 화면을 나타냄

특징

PresenterViewModel의 인스턴스를 가지고 있음
PresenterView는 1:1 관계

장점

PresenterViewModel의 의존성이 없음

단점

ViewPresenter 사이의 의존성이 높음
어플리케이션이 복잡해질수록 ViewPresenter 사이의 의존성이 강해짐

MVVM

Model + View + ViewModel

구조

  • Model: 어플리케이션에서 사용되는 데이터와 그 데이터를 처리하는 부분
  • View: 사용자에게 보여지는 UI 부분
  • View Model: View를 표현하기 위해 만든 Model
    View를 나타내주기 위한 Model이자 View를 나타내기 위한 데이터 처리를 하는 부분

동작

  1. 사용자의 Action들은 View를 통해 들어옴
  2. ViewAction이 들어오면, Command 패턴으로 View ModelAction을 전달
  3. View ModelModel에게 데이터를 요청
  4. ModelView Model에게 요청 받은 데이터를 응답
  5. View Model은 응답 받은 데이터를 가공하여 저장
  6. ViewView Model과 Data Binding하여 화면을 나타냄

특징

Command 패턴Data Binding 두 가지 패턴을 사용해 구현
View ModelView는 1:n 관계

장점

ViewModel 사이의 의존성이 없음
Command 패턴Data Binding을 사용해 ViewView Model 사이의 의존성 또한 없앤 디자인 패턴
각각의 부분은 독립적이기 때문에 모듈화하여 개발 가능

단점

View Model의 설계가 쉽지 않음

참고한 블로그

profile
끝없이 탐구하는 iOS 개발자 유재우입니다!

0개의 댓글