MVP 패턴이란?
안녕하세요 ! 오늘은 MVP 패턴에 관해서 알아보도록 하겠습니다.
안드로이드 프로그래밍을 하다보면 액티비티에 로직 코드를 넣어서 코딩을 하는 경우가 많은데요.
그러다보면 코드가 얽히고 섥혀서 나중에 코드를 리뷰하거나, 추가, 수정을 할때 복잡해서 힘들 때가 분명 생깁니다.
(그러한 코드를 스파게티 코드라고 부릅니다.)
이를 방지하기 위해서 많은 프로그래머가 어떻게 하면 방지할 수 있을지를 논의하였고 MVP 패턴을 사용하면 스파게티 코드를 방지하고 코드의 간결함과 유닛 단위 테스트를 하기 용이하다고 말합니다.
그렇다면 MVP 패턴이란 무엇일까요??
1. MVP 패턴의 기본요소
MVP 패턴은 Model, View, Presenter 3개의 층으로 프로젝트를 구성하는 방법을 말합니다.
Model(모델) : 데이터를 의미하고 데이터에 관한 메서드를 처리합니다.
Presenter(프레젠터) : 데이터와 뷰 사이에 위치하며 모델으로 부터 데이터 받기, 뷰에게 화면 갱신등.. 로직 처리를 담당합니다.
View(뷰) : 보여지는 화면을 뜻하며 액티비티, 프레그먼트, 뷰가 이 계층에 속합니다.
2. MVP 패턴의 Contract와 Interact
그 외에도 MVP 패턴을 효과적으로 사용하기 위해서 Contract나, interact를 정의하기도 합니다.
Contract는 인터페이스로써 View와 Presenter사이에 위치하며, inner 인터페이스로 View와 Presenter를 정의합니다. Presenter와 View 인터페이스를 여기에 정의합니다.
Interact는 데이터 베이스나 웹서비스, 다른 데이터 소스로 부터 데이터를 받아오고 프레젠터에 데이터를 보내는 역할을 담당합니다. 굳이 위치를 정의하자면 Presenter와 Model 사이로 생각 해볼 수도 있습니다.
3. StopWatch 예제
MVP패턴으로 구현되어있지 않은 StopWatch를 MVP 패턴으로 구현을 해보면서 자세히 알아가보도록 하겠습니다.
위 예제는 스타트 버튼을 누르면, 카운트가 올라가고 스톱을 누르면, 멈추고 리셋을 누르면, 0으로 초기화되면서 멈추는 아주 간단한 예제입니다.
아래의 코드는 MVP 패턴을 적용하지 않은 스톱워치의 MainActivity 코드입니다.
4. 결론
MVP 패턴은 안드로이드 프로그래밍을 할때 쉽게 코드가 얽히고 섥혀서 프로젝트가 커진다면 새로운 것을 추가하거나 리뷰하기 힘들지 않도록 방지합니다.
Activity는 화면 출력에만 집중하도록하고 로직은 Presenter에 위임하고 데이터 송수신을 담당시킵니다.
MVP를 사용함으로써 얻을 수 있는 장점으론
1. 가독성있고 유지력있는 코드
2. 높은 독립성을 보장하는 모듈적 코드
3. 테스트하기 용이한 코드
을 장점으로 가지게 됩니다.