본문 바로가기

코딩/안드로이드

MVP 패턴

Model은 느낌대로 데이터들

View도 느낌대로 화면에 뜨는 모든것들


Presenter는 뷰에서 데이터를 받아서 가공한뒤 모델로 데이터를 던져준다



뷰는 데이터(모델)를 얻기위해 프레젠터에 요청하고

데이터(모델)는 뷰에 접근하려면 프레젠터에 먼저 가야한다


프레젠터는 뷰와 모델 둘 다의 포인터를 가지고 있지만

뷰와 모델은 프레젠터만 포인터로 가지고 있다

뷰는 모델을 가지고 있지 않고 모델도 뷰를 가지고 있지 않음



중요한 점은 View에서 수행하는 모든 '동작'을 프레젠터로 넘겨주는 것이다


그리고 또 중요한점은 View는 일종의 BaseView를 인터페이스로 구현하여야 한다

그런 뒤에 프레젠터는 View 자체를 가지고 있는게 아니고 BaseView를 가지고 있어야 하며

프레전터가 View에 접근하려면 꼭 BaseView에서 Override된 함수를 이용하게 만들어야 한다


그렇게 해야 프레젠터를 테스팅할때 더미 View를 프레젠터에 전달 할 수 있게 되고, 따라서 테스팅이 수월해진다



결론


MVP의 목적 및 이점 

-> View는 어떠한 인터페이스를 구현해야 하고 Presenter는 그 인터페이스를 통해 뷰를 접근함으로서

Presenter를 테스팅할 떄 더미View를 Presenter에 inject시켜서 Presenter의 테스팅을 용이하게 할 수 있음

또한, 많은 코드가 View에서 Presenter로 빠지게 됨으로서 리팩토링/디버깅이 용이해짐