Design Pattern

MVC 패턴

notion image

정의

사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴

목적 및 특징

소프트웨어의 비즈니스 로직과 화면을 구분하기 위함
 
  • Model
    • 데이터와 행동을 갖는 객체
    • 비즈니스 로직 수행
    • 도메인 모델
  • View
    • 사용자가 보는 부분
    • 데이터의 시각화
  • Controller
    • Model과 View를 느슨하게 연결
    • 사용자의 요청을 해석, 처리, 결과 반환
    • 데이터의 흐름 제어
 
  • Controller는 여러개의 View를 선택할 수 있는 1:N 구조

장점

  • 각 컴포넌트의 코드 결합도를 낮추기 위해
  • 유지 보수성 증가
  • 코드의 재사용성을 높이기 위해
  • 구현자들 간의 커뮤니케이션 효율성을 높이기 위해

단점

  • View와 Model 사이의 의존성이 높다.
  • 어플리케이션이 커지면 Controller가 비대해진다.

예시

MVC 흐름

  1. 사용자가 요청
  1. 컨트롤러가 모델에게 데이터 요청
  1. 결과값을 컨트롤러에 반환
  1. 컨트롤러는 이 값을 뷰에 전달
  1. 뷰는 사용자가 보는 UI에 맞춰 결과를 보여준다.

  • Controller에서 중복 발생 → 별도의 객체, 메소드로 분리

주의 사항

  1. Model은 Controller와 View에 의존하지 않아야 한다.
  1. View는 Model에만 의존
  1. View는 사용자마다 다르게 보여주어야하는 데이터만 받아야 한다.
  1. Controller는 Model과 View에 의존 가능
 
  • Model에서 View의 접근 또는 역할 수행
  • View에서 “과한” 값 검증과 예외 처리
  • View에서 일어나는 비즈니스 로직

비교군과의 차이

MVP
MVVM
MVI
패턴
장점
단점
특징
MVC
가장 단순한 패턴으로 여러 개발 분야에서 보편적으로 사용되는 디자인 패턴
View와 Model사이의 의존성이 높기 때문에, 이는 앱이 커질수록 유지보수가 어려움 Controller 비대
MVP
MVP패턴은 인터페이스를 통해 통신하기 때문에 View와 Model사이의 의존성이 없음
View와 Presenter사이의 의존성이 높고, 앱이 커질수록 이 의존성은 더 강해짐
View에 직접 연결되는 대신 인터페이스를 통해 상호작용한다는 차이가 있음.
MVVM
데이터 바인딩을 이용한다면 View와 ViewModel 사이의 의존성을 없앨 수 있음
ViewModel의 설계가 매우 어려움
MVI
상태는 불변성을 가지기 때문에 우리는 예상 가능한 값을 얻을 수 있습니다. 데이터의 흐름이 정해져 있어 흐름을 이해하고 관리하기가 쉽다.
다른 MV들에 비해 러닝커브가 높다. 작은 변경도 모두 intent를 통해야 하고, 아주 작은 앱도 최소한의 intent와 model를 가져야 한다.

질문

  • MVC, MVP, MVVM, MVI 등 UI 아키텍처 디자인 패턴 중 자신이 알고있는 아키텍쳐 2개를 골라, 특징/장점/단점을 설명해주세요.
  • MVI의 특장점을 설명해주세요.

출처