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

yoo·2024년 1월 3일

디자인 패턴이란?
기술부채를 최소화하고 코드의 재사용 및 지속 가능성을 높인다. 쉽게 말해서 코드를 구조화시킬까에 대한 전략이다.

MVC

Model-View-Controller 로 이루어져 있다.

  1. Model : 데이터와 비즈니스 로직을 관리한다.
  2. View : 레이아웃과 화면을 처리한다.
  3. Controller : Model과 View사이를 이어주는 인터페이스 역할

모델(데이터), 뷰(UI), 컨트롤러(로직)

동작방식

  1. 사용자의 요청이 Controller에 들어온다.
  2. Controller는 요청에 맞게 Model을 업데이트한다.
  3. Controller에서 업데이트된 Model을 나타내줄 View를 선택한다.
  4. View는 업데이트된 Model을 사용자에게 보여주기 위해 UI데이터를 업데이트한다.

MVC패턴의 장점

  • 서로 역할이 분리되어 각자의 역할에 집중할 수 있다.
    -> 협업할 때 맡은 부분의 개발에만 집중할 수 있어 효율성증가(분업 가능)
  • 동시다발적개발 : 백엔드 개발자와 프론트엔드 개발자 독립적으로 개발진행 가능
  • 유지보수성, 애플리케이션의 확장성, 유연성 증가
  • 중복 코딩의 문제점이 사라진다.

MVC패턴의 단점

  • 복잡한 대규모 프로그램을 개발하게 되면 문제점이 발견됨
    -> 다수의 View와 Model이 Controller를 통해 복잡하게 연결될 수 있기 때문에 Controller가 뚱뚱해지게 된다.
    ->이러한 현상을 Massive-View-Controller현상이라고 한다.
    -> 수정시 테스트가힘들고, 파악이 어렵기 때문에 여러 Side-Effect를 불러오게 되는 문제점 발생
    -> 그래서 MVC는 위 문제점을 보완하기 위해 다양한 패턴들을 파생시킴(MVP, MVVM, Flux, Redux 등)

MVP

Model - View - Presenter로 이루어져 있다

기존의 MVC패턴을 보안하기 위한 패턴이며 MVC의 Model View가 의존 관계였던걸 해결하기위해 고안된 패턴

동작방식

  1. 사용자의 입력이 view를 통해 들어온다.
  2. 데이터를 presenter에게 요청한다.
  3. presenter는 model에게 데이터를 요청한다.
  4. model은 presenter에게 데이터를 응답한다.
  5. presenter는 view에게 데이터를 응답한다.
  6. view는 응답한 데이터를 화면에 보여준다.

장/단점

  • MVP패턴은 앱을 구성하는 코드를 기능단위로 분해(모듈화)하기 때문에 협업시 유리해진다.
  • 모듈화를 했기 때문에 소스파일 관리,테스트가 용이 해진다 → 유지보수가 쉬워진다.
  • view 와 model의 의존성은 해결되었으나 오히려 view와 presenter사이가 의존성이 강해졌다
  • 프로젝트가 커졌을때 controller가 복잡했던 문제를 presenter가 복잡해져서 문제는 여전하다.

MVVM

Model - View - View Model로 이루어져 있다.현재 가장 많이 쓰이고 있는 디자인 패턴이다.

  1. Model : 앱 내에서 사용하는 데이터(struct)이다.
  2. View : 화면에 보여지는 UI요소(UIView, UIViewController)이다. MVC와는 다르게 UIViewController가 추가되었다.
  3. View Model : ViewModel: 이름 그대로 View와 Model 사이에 있는, 중계자이다.

동작방식

  1. 사용자의 요청이 View를 통해 들어온다.
  2. 사용자의 요청이 View에 들어오면 View Model에 요청을 전달한다
  3. View Model은 Model에 데이터를 요청한다.
  4. Model은 View Model에 요청받은 데이터를 응답한다.
  5. View Model은 응답받은 데이터를 가공하여 저장한다.
  6. Viwe는 View Model과 데이터 바인딩을하여 화면에 응답받은 데이터를 보여준다.

MVVM 패턴의 장점

  • MVVM 아키텍처에서 각각의 모든 코드는 알갱이성(granular)을 유지하기 때문에
    모든 내부적, 외부적 의존성을 코어 로직을 포함한 코드로부터 유지한다. (View와 Model 사이의 의존성이 없다.)
  • 늘어나는 코드 알갱이 조각과 분리 경계로 인하여, 확장성이 높은 동시에 유지보수성을 얻게 된다.
    → 각각의 부분은 독립적이기 때뭉네 모듈화하여 개발할 수 있다.
  • 뷰를 추상화해서 비즈니스 로직 뒤에 있는 코드가 줄어들게 한다.
  • 로직과 프레젠테이션 계층은 느슨하게 결합된다.
  • 어설픈 UI 자동화 도구 없이 테스트가 가능하다.

MVVM 패턴의 단점

  • View Model의 설계가 쉽지 않다.
  • 데이터 바인딩이 필수적으로 요구된다.
  • 복잡해질수록 Controller처럼 ViewModel이 빠르게 비대해진다.
  • 표준화된 틀이 존재하지 않아 사람마다 이해가 다르다.

+) Data Binding

데이터 바인딩 : Model과 UI 요소 간의 싱크를 맞춰주는 것

MVVM 참고 사이트
https://velog.io/@leeesangheee/Swift-MVVM-%ED%8C%A8%ED%84%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0

MVC와는 다른 MVVM의 특징

  • 뷰컨트롤러가 모델에 직접 접근하지 못한다.
  • 뷰컨트롤러가 뷰 레이어에 포함된다.

0개의 댓글