# MVVM, MVC, MVP 등 자신이 알고있는 아키텍쳐를 설명하시오.
### MVC를 설명해주세요
- MVC(Model - View - Controller) 디자인 패턴은 하나의 애플리케이션을 Model, View, Controller로 이루어진 3개의 측면으로 분리하여 개발하는 디자인 패턴입니다. 특징으로는, Controller가 여러개의 View를 선택할 수 있는 1:n 구조입니다.
>- Model : `Model은 View에 표시되기 위해 필요한 데이터`, Model은 `비즈니스 로직을 설명하는 클래스의 집합`으로 구성, Model은 어떻게 `데이터가 변경되고 조작될 수 있는지에 관한 규칙을 정의`
>- View : Controller로 부터 받은 UI 데이터를 표시하는 역할, 저버 패턴을 이용하여 Model을 관찰, 데이터의 상태 변화를 업데이트 하기 위함
>- Controller : Model을 통해 받은 데이터를 처리하거나, 결과 값을 View에 반환하는 역할, `View와 Model사이를 중재`하는 역할
#### MVC의 동작 방식은 어떻게 되나요?
1. 사용자의 요청이 Controller에 들어옴
2. Controller는 요청에 맞게 Model을 업데이트
3. Controller에서 업데이트된 Model을 나타내줄 View를 선택
4. View는 업데이트된 Model을 사용자에게 보여주기 위해 UI 데이터를 업데이트
### MVP를 설명해주세요
- MVP(Model - View - Presenter) 패턴은 MVC와 유사한 디자인 패턴으로, MVC 패턴에서 파생된 패턴입니다. Controller 역할을 Presenter가 하는 것 입니다.
#### MVP의 동작 방식은 어떻게 되나요?
1. 사용자의 Action은 View를 통해 들어옴
2. View는 데이터를 Presenter에 요청
3. Presenter는 Model에게 데이터를 요청
4. Model은 Presenter에게 요청받은 데이터를 응답
5. Presenter가 데이터를 가공하고 다시 View에게 응답
6. View는 Presenter로 부터 데이터를 응답받고 UI 데이터를 갱신
### MVVM을 설명해주세요
- MVVM 패턴은 양방향 데이터 바인딩을 지원하고, View Model 안에 있는 데이터의 변화를 View에 전파합니다. 일반적으로 옵저버 패턴을 활용하여 View Model의 변경사항을 Model에게 알리는 패턴입니다.
#### MVVM의 동작 방식은 어떻게되나요?
1. 사용자의 Action들은 View를 통해 들어옴
2. View에 Action이 들어오면 ViewModel에 Action을 전달
3. ViewModel은 Model에게 데이터를 요청
4. Model은 ViewModel에게 요청받은 데이터를 응답
5. ViewModel은 응답 받은 데이터를 가공하여 저장
6. View는 Data Binding을 이용해 UI를 갱신
### MVVM, MVC, MVP의 각각 장단점이 무엇인가요?
|패턴|장점|단점|
|:--:|:-:|:-:|
|MVC|가장 단순한 패턴으로 여러 개발 분야에서 보편적으로 사용되는 디자인 패턴|View와 Model사이의 의존성이 높기 때문에, 이는 앱이 커질수록 유지보수가 어려움|
|MVP|MVP패턴은 인터페이스를 통해 통신하기 때문에 MVC의 단점으로 지적되었던 View와 Model사이의 의존성이 없음|View와 Presenter사이의 의존성이 높고, 앱이 커질수록 이 의존성은 더 강해짐|
|MVVM|데이터 바인딩을 이용한다면 View와 ViewModel 사이의 의존성을 없앨 수 있음|ViewModel의 설계가 매우 어려움|