본문 바로가기

프로그래밍/디자인패턴

MVP (Model-View-Presenter)

728x90
반응형

- Model View Presenter 의 약자

- 프로그래밍을 할 때 Model, View, Presenter로 구분하여 설계하는 방법이다.

- MVC 모델의 단점을 보안하기 위하 고안된 패턴이다.

각각의 역할은 아래와 같다.

1. Model

- 데이터를 보유 또는 가공하는 역할을 한다.

(사용자가 편집하길 원하는 모든 데이터들을 가지고 있다)

- View와는 서로 모르는 관계를 갖는다.

- Presenter와는 요청을 받고 그 요청에 맞는 정보를 가공하여 전달해줄 뿐의 관계다.

2. View

- UI등 무언가 화면에 보여주기 위한 역할을 한다.

- 화면에 보여주는 역할 외에는 그 무엇도 관여해서는 안된다.

- Presenter에 간접적으로 버튼이 눌렸음 정도만 알린다.

- Model과는 서로 모르는 관계를 갖는다.

3. Presenter

- Model과 View를 이어주는 중간다리 역할을 한다.

- Event에 대한 기능을 수행하고 Model에서 가공된 정보를 View에게 전달한다.

위 역할에 따라 계산기로 간단히 플로우를 살펴보자면

1. Model

- 일반용, 공학용 등의 플래그들을 보유

- 일반용일 경우 일반용에 필요한 정보를 가공하여 리턴

- 공학용일 경우 공학용에 필요한 정보를 가공하여 리턴

2. Presenter

- 숫자, +, -, 보기, 편집 등의 이벤트를 받음

- 보기->일반용 플래그를 누르면 Model로부터 가공된 정보를 받아 View에 던져준다.

- 보기->공학용 플래그를 누르면 Model로부터 가공된 정보를 받아 View에 던져준다.

3. View

- 화면에 보이는 것들을 그린다.

- Presenter가 Model로부터 일반용, 공학용 등 가공된 정보를 가져다가 던져주면 View에서는 그에 맞는 화면을 그려준다.

 

그림은 C인데 오타입니다.. P 입니다.

 

장점

- 각각 역할에 맞는 작업만 한다.

- Model과 View가 독립성을 갖는다.

단점

- MVC와 달리 이번에는 Presenter와 View의 의존성이 강하다.

참고 출처

 

디자인패턴) MVP 패턴

MVP 패턴 (Model + View + Presenter) MVP 패턴은 MVC의 View와 Model 사이의 의존성이 높아지는것을 낮추기 위해서 Persenter라는 개념이 도입된 패턴이다. 사용자 입력은 MVC와 동일하게 VIew를 통해서 받는다...

drehzr.tistory.com

 

MVC 링크

 

MVC (Model-View-Controller)

- Model View Controller 의 약자 - 프로그래밍을 할 때 Model, View, Controller로 구분하여 설계하는 방법을 말한다. - View와 Controller는 내부 속성 값을 가져서는 안된다. ​ 각각의 역할은 아래와 같다. 1...

chipmunk-plump-plump.tistory.com

MVVM 링크

 

MVVM (Model-View-ViewModel)

- Model View ViewModel의 약자 - 프로그래밍을 할 때 Model, View, ViewModel로 구분하여 설계하는 방법이다. - 사용자 인터페이스의 이벤트 중심 프로그래밍을 간소화하기 위해 고안되었다. - Ken Cooper 및 Ted..

chipmunk-plump-plump.tistory.com

다람쥐와 포동포동이

 

 

RememberCook 9월 28일 정식 출시!

두번째 게임인 RememberCook이 출시되었습니다. 귀여운 캐릭터들이 나오는 간단한 게임이며 플레이어의 공간인지능력을 테스트하는 게임입니다. 아래 링크를 통해 다운 받으실 수 있으니 많은 관��

chipmunk-plump-plump.tistory.com

반응형

'프로그래밍 > 디자인패턴' 카테고리의 다른 글

Adapter (어댑터)  (9) 2020.04.22
MVVM (Model-View-ViewModel)  (0) 2020.04.09
MVC (Model-View-Controller)  (0) 2020.04.09
Command (커맨드)  (0) 2020.04.09
Strategy (스트레티지)  (0) 2020.04.09