Design Pattern
MVC 패턴
정의
사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴
목적 및 특징
소프트웨어의 비즈니스 로직과 화면을 구분하기 위함
- Model
- 데이터와 행동을 갖는 객체
- 비즈니스 로직 수행
- 도메인 모델
- View
- 사용자가 보는 부분
- 데이터의 시각화
- Controller
- Model과 View를 느슨하게 연결
- 사용자의 요청을 해석, 처리, 결과 반환
- 데이터의 흐름 제어
- Controller는 여러개의 View를 선택할 수 있는 1:N 구조
장점
- 각 컴포넌트의 코드 결합도를 낮추기 위해
- 유지 보수성 증가
- 코드의 재사용성을 높이기 위해
- 구현자들 간의 커뮤니케이션 효율성을 높이기 위해
단점
- View와 Model 사이의 의존성이 높다.
- 어플리케이션이 커지면 Controller가 비대해진다.
예시
MVC 흐름
- 사용자가 요청
- 컨트롤러가 모델에게 데이터 요청
- 결과값을 컨트롤러에 반환
- 컨트롤러는 이 값을 뷰에 전달
- 뷰는 사용자가 보는 UI에 맞춰 결과를 보여준다.
팁
- Controller에서 중복 발생 → 별도의 객체, 메소드로 분리
주의 사항
- Model은 Controller와 View에 의존하지 않아야 한다.
- View는 Model에만 의존
- View는 사용자마다 다르게 보여주어야하는 데이터만 받아야 한다.
- Controller는 Model과 View에 의존 가능
- Model에서 View의 접근 또는 역할 수행
- View에서 “과한” 값 검증과 예외 처리
- View에서 일어나는 비즈니스 로직
비교군과의 차이
MVPMVVMMVI패턴 | 장점 | 단점 | 특징 |
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의 특장점을 설명해주세요.