[디자인패턴] MVP 패턴

sunny·2023년 3월 19일
0

디자인 패턴

목록 보기
10/11
post-thumbnail

MVP 패턴


MVP 패턴이란? - Model, View, Presenter

MVC에서 C에 해당하는 Controller가 Presenter로 교체된 패턴

https://user-images.githubusercontent.com/88873302/226183444-98d0a23b-167e-4062-8d13-218b9bd1be36.png

Presenter

Presenter는 View를 통해 사용자의 입력을 받은 후 Model에 도움을 받아 사용자의 데이터를 처리하고 그 결과를 View로 다시 전달한다.

MVP 패턴을 사용하는 이유❓

💡 MVC는 Model과 View가 서로 연결되어 있어 의존 관계를 갖게 된다

❗ 하지만, MVP는 Model과 View가 분리되어 있고 오직 Presenter를 통해서 상태나 변화를 알려줄 수 있다

MVP 패턴의 동작 방식

  1. 사용자의 Action은 View를 통해 들어오게 된다
  2. View는 데이터를 Presenter에 요청한다
  3. Presenter는 Model에게 데이터를 요청한다
  4. Model은 Presenter에게 요청 받은 데이터를 응답한다
  5. Presenter가 데이터를 가공하고 다시 View에게 응답한다
  6. View는 Presenter로부터 데이터를 응답받고 UI 데이터를 갱신한다

MVP 패턴의 장단점

장점

  • View와 Model 사이의 의존성 제거, 결합도⬇
  • 코드 재사용성, 확장성⬆

단점

  • 애플리케이션이 복잡해질수록 View와 Presenter 사이의 의존성⬆

예제 코드

public class Impl {
    interface Presenter {
        void loadData();
        void createModel();
    }
    
    interface View {
        void completed(String data);
    }
}

class View implements Impl.View {
    
    Presenter presenter;
    
    public View (){
        presenter = new Presenter(this);
        presenter.createModel();
        presenter.loadData();
    }
    
    @Override
    public void completed(String data){
        System.out.print(data);
    }
}

class Presenter implements Impl.Presenter{
    
    private Impl.View view;
    private Model model;
    
    public Presenter(Impl.View view){
        this.view = view;
    }
    
    @Override
    public void createModel(){
        model = new Model();
    }
    
    @Override
    public void loadData() {
        if(model == null){
            System.out.print("model is null");
            return;
        }
        
        view.completed(model.getName());
    }
}

class Model {
    private String name = "kim";
    public String getName(){
        return name;
    }
}

참고 자료

0개의 댓글

관련 채용 정보