본질적으로는 MVC의 컨트롤러와 같지만, 뷰에 연결되는 것이 아니라 그냥 인터페이스라는 점이 다르다. 이에 따라 MVC가 가진 테스트 가능성 문제와 함께 모듈화/유연성 문제 역시 해결한다. 사실 극단적으로 MVP를 따르는 사람들은 프리젠터가 절대로 어떤 안드로이드 API나 코드라도 참조해서는 안된다고 주장한다.
Model과 View 사이의 의존성을 해결했지만, 역으로 Presenter와 View 사이가 1:1로 강한 의존성을 가진다.
MVC의 Controller와 다르게 Presenter는 뷰에게 무언가를 표시하는 방법을 지시하는 대신, 표시할 내용만 전달한다.(보기를 구성하는 방법만 지정한다.)
그리고 인터페이스와 로직을 분리해서 관리할 수 있어 각 행동의 의도가 더 단순하고 명확해진다.
하지만 Controller 처럼 시간이 지남에 따라 추가 비즈니스 로직이 모이는 경향이 있어 문제가 발생하기 쉽고 분리하기 어려운 Presenter가 생겨서 유지보수에 어려움이 있다. 그리고 프로젝트가 커질 수록 Presenter의 자원이 많아질 수 있다.
MVP는 애플리케이션을 모듈로 나눌 수 있다는 점에서 MVC보다 약간 우위에 있다. 따라서 지속적으로 뷰를 생성하지 않아도 된다. 즉, MVP는 뷰를 재사용 가능하게 만드는데 도움이 될 수 있다.
https://devscorch.com/?p=1460
https://ko.wikipedia.org/wiki/%EB%AA%A8%EB%8D%B8-%EB%B7%B0-%ED%94%84%EB%A6%AC%EC%A0%A0%ED%84%B0
https://swimjiy.github.io/2019-05-28-web-mvc-mvp-mvvm
https://cjw-awdsd.tistory.com/9
https://jhtop0419.tistory.com/20
https://academy.realm.io/kr/posts/eric-maxwell-mvc-mvp-and-mvvm-on-android/
https://www.baeldung.com/mvc-vs-mvp-pattern