Android/Architecture
MVP 패턴을 알아보기
봄석
2019. 8. 19. 20:24
MVP 패턴을 알아보기
MVP란??
MVC에서 파생된 디자인 패턴으로 안드로이드에서 주로 사용하고 있습니다.
MVP가 나오게 된 이유는, View와 Model을 완전히 분리해서 사용하기 위함입니다.
MVP는 Model의 역할인 비지니스 로직을
독립적으로 테스트할 수 있습니다. MVP 패턴의 각 구성에 대해서 자세히 알아보도록 하겠습니다.
MVP 패턴정의
MVP는 위에서 말한대로 Model, View ,Presenter의 앞글자를 따서 이름이 지어졌습니다.
이 패턴의 핵심 아이디어는 사용자 인터페이스(view)와 비즈니스로직(model)을 분리하고, 서로간에 상호작용을
다른객체(Presenter)에 위임해 서로의 영향을 최소화 하는 것에 있습니다.
Model
- 내부적으로 쓰이는 데이터를 저장, 처리
- 비즈니스로직이라 불림
- View와 Presenter에 의존적이지 않은 독립적인 영역
View
- 사용자 인터페이스(UI)라 불리는 영역 ( Activity, Fragment 등)
- Model에서 처리된 데이터를 Presenter를 통해 받아 사용자에게 보여줌
- 사용자 액션 및 Activity LifeCycle변화를 감지하여 Presenter에 보냄
- Presenter를 이용하여 데이터를 주고받기 때문에 , Presenter에 의존적
- View 에서 발생하는 이벤트는 직접 핸들링 할 수 있으나 Presenter 에 위임하도록 한다
- 위임하는 방법은 액티비티가 뷰 인터페이스를 구현해서 Presenter에서 코드를 만들 인터페이스를 갖도록 하면 됩니다. 이렇게 하면 특정 뷰와 결합되지 않고 가상 뷰를 구현해서 간단한 유닛 테스트를 실행할 수 있음
Presenter
- Model과 View 사이의 매개채
- Model의 로직으로부터 나온 결과를 전달받아서 View에 보내 UI변경
- 본질적으로는 MVC의 컨트롤러와 같지만, 뷰에 연결되는 것이 아니라 인터페이스로 연결된다는 점이 다름
- 이에 따라 MVC가 가진 테스트 가능성 문제와 함께 모듈화/유연성 문제 역시 해결할 수 있음
- 프리젠터(Presenter)의 역할을 한줄로 표현한다면 뷰(View)와 모델(Model) 사이에서 자료 전달 역할을 함
MVP 패턴 사용의 장점
- Model과 View간의 결합도를 낮춰줍니다.
- 새로운 기능을 추가하거나 변경할 필요가있을때 관련된 부분만 수정하면 되기 때문에 확장성이 좋아집니다.
- 테스트 코드를 작성하기 편리해집니다.
Mvp Sample Github
https://github.com/qjatjr1108/MVP_MVVM_MVC_SAMPLE