면접에서 자주 물어보는 mvc 패턴 !
각 요소들과 다른 패턴과의 차이를 알아보자.
1. MVC (Model-View-Controller)
구성 요소
• Model: 데이터와 비즈니스 로직을 담당
• View: 사용자에게 UI를 보여줌
• Controller: 사용자의 입력을 처리하고 Model과 View를 연결
특징
• Controller가 View와 Model을 연결해 주는 구조
• View와 Model이 직접 소통할 수도 있음
• 일반적으로 Web 애플리케이션에서 많이 사용됨 (예: Spring, ASP.NET)
단점
• Controller가 커질수록 복잡해질 수 있음
• View와 Model이 직접 연결되면 의존성이 증가할 수 있음
2. MVP (Model-View-Presenter)
구성 요소
• Model: 데이터와 비즈니스 로직 담당
• View: UI를 담당하며, Presenter와만 소통
• Presenter: View와 Model 사이에서 중재 역할을 하며, View의 로직을 처리
특징
• View는 Presenter의 지시를 받아서만 동작
• View와 Model이 직접 소통하지 않음
• UI 테스트가 용이함 (Presenter를 단독 테스트 가능)
• 안드로이드 개발에서 많이 사용됨
단점
• Presenter의 코드가 커질 수 있음
3. MVVM (Model-View-ViewModel)
구성 요소
• Model: 데이터 및 비즈니스 로직 담당
• View: UI를 담당
• ViewModel: Model과 View를 연결하는 역할, UI 로직을 포함
특징
• ViewModel이 Model의 데이터를 가공하여 View에 제공
• ViewModel은 View의 참조 없이 동작 가능 → 의존성 감소
• Data Binding을 활용하여 View와 ViewModel을 자동 동기화 가능
• WPF, SwiftUI, Jetpack Compose 등에서 많이 사용됨
단점
• Data Binding을 사용할 경우 학습 비용 증가
• 작은 프로젝트에서는 오버헤드가 있을 수 있음