디자인 패턴?
객체 지향 프로그래밍 설계를 할 때 자주 발생하는 문제들을 피하기 위해 사용되는 패턴 궁극적으론 유지보수와 개발효율의 증대를 위해 사용한다.
- 기본적으로 각각의 역할을 나눠 기능들을 만들고 그 기능들로 해야할 일을 한번에 처리해주는 클래스를 만드는 형식
- 위 같은 설명보다 ~~~ 패턴을 사용하자 제안하는 쪽이 이해가 더 간단하다
주의할 점
- 디자인 패턴을 맹신하여 모든 문제를 패턴을 써서 해결하려 들지 말 것
- 디자인 패턴은 모든 방법에 대한 해결책이 아니며 상황에 따라 자주 쓰이는 설꼐 방법을 정리한 코딩 방법론의 일종
- 디자인 패턴에 얽매이는 것보단 그 패턴이 왜 효율적인이 이해하도록 하자
MVC
Model + View + Controller를 합친 구조
Model : 어플리케이션에서 사용되는 데이터와 그 데이터를 처리하는 부분
View : 사용자에게 보여지는 UI 부분
Controller : 사용자의 입력을 받고 처리하는 부분
MVC 동작
- 사용자의 입력이 Controller로 들어온다.
- 입력을 확인하고, Model 업데이트
- Controller는 Model을 나타내줄 View 선택
- View는 Model을 이용해 화면을 나타낸다.
MVC 특징
- Controller는 여러개의 View를 선택할 수 있는 1:N 구조
- Controller는 View를 선택할 뿐 직접 업데이트 하지 않는다. (View는 Controller를 모른다.)
MVC 장점
- 개발 속도를 병렬적으로 가속화 시킬 수 있다.
- 여러 개의 뷰를 모델에 빌드할 수 있다. 비즈니스 로직과 데이터가 분리되어 있기 때문에 코드 복제가 제한된다.
- 변경사항이 전체 모델에 영향을 주지 않는다.
- 데이터를 어떠한 형태의 가공 없이 리턴한다.
MVC 단점
- 뷰를 하나 만들면 이에 대응되는 컨트롤러도 만들어야 하나?
- 뷰가 수정되면 컨트롤러도 수정되어야 하나?
- 모델 업데이트는 컨트롤러에서 하지 않아도 가능한가?
이러한 단점을 보완하기 위해 나온 것이 MVP 패턴
MVP
Model + View + Presenter를 합친 구조
Model : 어플리케이션에서 사용되는 데이터와 그 데이터를 처리하는 부분입니다.
View : 사용자에서 보여지는 UI 부분입니다.
Presenter : View에서 요청한 정보로 Model을 가공하여 View에 전달해 주는 부분입니다. View와 Model을 붙여주는 접착제 역할을 합니다.
MVP 동작
- 사용자의 Action들은 View를 통해 들어오게 됩니다.
- View는 데이터를 Presenter에 요청합니다.
- Presenter는 Model에게 데이터를 요청합니다.
- Model은 Presenter에서 요청받은 데이터를 응답합니다.
- Presenter는 View에게 데이터를 응답합니다.
- View는 Presenter가 응답한 데이터를 이용하여 화면을 나타냅니다.
MVP 특징
- Presenter는 View와 Model의 인스턴스를 가지고 있어 둘을 연결하는 접착제 역할을 합니다.
- Presenter와 View는 1:1 관계입니다.
MVP 장점
- 어플리케이션의 디버깅을 더 쉽게 만든다. MVP는 세 가지의 다른 계층의 추상화를 소개하기 때문이다.
- 코드 재사용성이 높아진다. 뷰를 컨트롤 하기 위해 여러개의 프레젠터를 가질 수 있다.
- 더 나은 관심사 분리를 실행할 수 있다. 비즈니스 로직과 영속성 로직을 Activity와 Fragment 클래스에서 분리할 수 있다.
MVC와 MVP의 구조

상기의 흐름은 어떤 이벤트가 외부로부터 들어오고 해당 이벤트로 인해 모델의 데이터를 가져온다는 것을 알 수 있다.
MVVM
Model + View + View Model를 합친 구조
Model : 어플리케이션에서 사용되는 데이터와 그 데이터를 처리하는 부분입니다.
View : 사용자에서 보여지는 UI 부분입니다.
View Model : View를 표현하기 위해 만든 View를 위한 Model입니다. View를 나타내 주기 위한 Model이자 View를 나타내기 위한 데이터 처리를 하는 부분입니다.
MVVM 동작
- 사용자의 Action들은 View를 통해 들어오게 됩니다.
- View에 Action이 들어오면, Command 패턴으로 View Model에 Action을 전달합니다.
- View Model은 Model에게 데이터를 요청합니다.
- Model은 View Model에게 요청받은 데이터를 응답합니다.
- View Model은 응답 받은 데이터를 가공하여 저장합니다.
- View는 View Model과 Data Binding하여 화면을 나타냅니다.
MVVM 특징
-MVVM 패턴은 Command 패턴과 Data Binding 두 가지 패턴을 사용하여 구현되었습니다.
-Command 패턴과 Data Binding을 이용하여 View와 View Model 사이의 의존성을 없앴습니다.
-View Model과 View는 1:n 관계입니다.
MVVM 장점
- 테스트 용이성 : MVVM 아키텍처에서 각각의 모든 코드는 알갱이성(granular)을 유지한다. 적절한 방법으로 구현되었다는 전제 하에, 모든 내부적, 외부적 의존성을 코어 로직을 포함한 코드로부터 유지한다.
- 확장성 : 늘어나는 코드 알갱이 조각과 분리 경계로 인하여, 동시에 유지보수성을 얻게 된다.
- MVVM 패턴을 사용하는 가장 주요한 목적은 뷰를 추상화해서 비즈니스 로직 뒤에 있는 코드가 줄어들게 하는 것이다.
- 로직과 프레젠테이션 계층은 느슨하게 결합된다.
- 어설픈 UI 자동화 도구 없이 테스트가 가능하다.
MVVM 패턴의 구조

모델이 변경됨으로서 레포지토리도 업데이트 되고 뷰도 업데이트 되고, 데이터의 변화가 UI를 포함하여 서비스의 상태 변화가 된다.
참고
https://enumclass.tistory.com/230
https://brunch.co.kr/@oemilk/113