이번엔 MVP 패턴에 대해 알아보자.
디자인 패턴이 뭔지 모르겠다면 아래 포스팅부터 보고 오면 도움이 될 것이다.
디자인 패턴 & MVC 패턴에 대한 포스팅이다.
MVP 패턴
MVC 패턴을 기반으로 생겨났으며,
Controller의 개념을 삭제하고 Presenter가 추가된 디자인 패턴이다.
Model + View + Presenter 의 약어로 MVP라 칭한다.
Presenter가 중개자 역할을 해주기 때문에
View와 Model을 확실하게 분리한 패턴이라고 볼 수 있다.
✅ Model
- 데이터와 비즈니스 로직을 주로 관리한다.
- Presenter 로부터 명령을 전달 받고 데이터의 상태를 변경시킨다.
- 데이터의 상태가 변경되면 다시 Presenter에게 알린다.
✅ View
- View · Layout 등 화면을 처리하는 곳이면서,
안드로이드의 경우 Activity · Fragament에 해당한다.
- 사용자 입력을 받고 Presenter에게 알린다.
- 업데이트 될 데이터를 Presenter에게 전달 받는다.
✅ Presenter
- View와 Model 사이에서 데이터를 전달하는 역할을 한다.
예제
레이아웃 파일은 따로 올리지 않는다.
✅ MainActivity.java
public class MainActivity extends AppCompatActivity {
Presenter presenter;
TextView textView;
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mvpactivity);
presenter = new Presenter();
textView = findViewById(R.id.textView);
button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Presenter 함수 호출하여 반환 값을 View에 업데이트
textView.setText(presenter.getResult());
}
});
}
}
MVC 패턴 예제와 마찬가지로,
버튼 클릭 시 텍스트 뷰의 텍스트가 바뀌는 간단한 예제다.
안드로이드에서의 MVP 패턴은 Activity가 View에 해당한다고 언급했었다.
그리고 View와 Model은 서로 존재를 알아서는 안 된다.
그렇기에 Activity(View)에서는 Presenter만을 참조하고 있다.
Presenter의 getResult() 메서드는 텍스트로 들어갈 String을 반환한다.
✅ Presenter.java
public class Presenter {
Model model = new Model();
public String getResult() {
return model.choiceBreakfast();
}
}
Presenter는 Model을 참조하고 있다.
View에서 호출한 getResult() 메서드 안에는 Model의 메서드를 호출했다.
위 메서드도 마찬가지로 String을 반환한다.
✅ Model.java
public class Model {
String breakfast = "";
public String choiceBreakfast() {
Random random = new Random();
int num = random.nextInt(5);
switch (num) {
case 0 : breakfast = "시리얼";
break;
...
}
return breakfast;
}
}
Model은 Presenter의 호출을 받아 간단한 랜덤 로직을 동작시키고
breakfast라는 데이터를 정제하여 반환하는 역할을 한다.
✅ 결과
✅ 정리
▶ View에서 사용자 입력을 받음
▶ View에서 Presenter의 메서드 호출
▶ Presenter에서 Model의 메서드 호출
▶ Model에서 데이터 정제하여 Presenter로 반환
▶ Presenter는 Model로부터 받은 데이터를 View로 반환
▶ View는 Presenter로부터 받은 데이터로 UI 업데이트
MVP 패턴의 구조를 쉽게 이해시키고자 위 처럼 단순하게 예제를 만들었다.
더 근본적으로 사용하려면 View에서도 UI를 업데이트 시켜주는 메서드를 만들고,
Presenter에서 View를 참조하고 해당 메서드를 호출하여 데이터를 전달해야 한다.
MVP 패턴의 큰 특징 중 하나가 Presenter가 View와 Model 양쪽으로 의존성을 띄는 것이기 때문이다.
그래도 더 중요한 것은 View와 Model이 서로의 존재를 모른다는 것과,
그 사이에서 Presenter가 중개자 역할을 한다는 것이다.
그렇기에 View와 Model이 확실히 분리되었고,
이것이 MVC 패턴과의 가장 큰 차이점이다.
MVP 패턴의 단점이라고 언급할 만한 것이 있다면,
프로젝트가 커지면 Presenter가 너무 무거워진다는 것이다.
그렇기에 실제 프로젝트에 적용할 때는
Presenter의 역할을 한 눈에 파악할 수 있도록 Interface를 활용하곤 한다.
이번 포스팅에서는 MVP 패턴에 대해 알아보았다.
개인적으론 MVC 보다 깔끔하다고 느끼며
View와 Model이 확실히 분리되어서 유지·보수도 더 편하다고 생각한다.
'Android (안드로이드)' 카테고리의 다른 글
[Android] 의존성 주입 / Dependency Injection (0) | 2024.02.23 |
---|---|
[Android] 디자인 패턴 - MVVM 패턴 / 예제 (0) | 2024.02.16 |
[Android] 디자인 패턴 - MVC 패턴 / 예제 (0) | 2024.02.14 |
[Android] LiveData / MutableLiveData / 라이브 데이터 / 사용법 / 예제 (0) | 2024.02.13 |
[Android] 데이터 바인딩 / DataBinding / 사용법 / 예제 (2) | 2024.02.12 |