[면접을 위한 cs지식 ]디자인 패턴 MVP 패턴

GoldenDusk·2023년 8월 3일
0

CS지식

목록 보기
7/26
post-thumbnail

MVP 패턴

1. MVP 개념

  • 모델-뷰-프레젠터(Model-View-Presenter)
  • MVC(Model-View-Controller) 패턴의 변형

2. 왜 쓸까?

  • 주로 사용자 인터페이스와 비즈니스 로직을 분리하여 코드의 유지보수성과 테스트 향상시키기 위해 사용
  • MVC 패턴의 단점인 컨트롤러(Controller)비즈니스 로직과 뷰의 역할을 동시에 담당하는 것을 보완

3. 어디에 쓰일까?

  • 특히 안드로이드 앱 개발에 많이 사용
  • 안드로이드에서는 액티비티(Activity)가 뷰 역할을 하고, 프레젠터는 비즈니스 로직과 뷰 간의 중개를 담당
  • 이렇게 하면 안드로이드 앱의 구조를 더 잘 구성하고, 액티비티에서 비즈니스 로직을 분리하여 앱의 유지보수성과 테스트 용이성을 향상

4. MVP 주요 요소

  1. 모델(Model)
  • 비즈니스 로직과 데이터를 담당하는 부분
  • 데이터의 유효성 검증, 데이터베이스와의 상호작용, 네트워크 통신 등과 같은 업무를 수행
  • 뷰와 직접적으로 상호작용하지 않으며, 인터페이스나 콜백을 통해 프레젠터와 소통
  1. 뷰(View)
  • 사용자 인터페이스를 담당하는 부분
  • 사용자의 입력을 받고, 데이터를 표시하며, 화면을 업데이트하는 역할
  • 모델과 직접적으로 상호작용하지 않으며, 프레젠터에 의해 조작되어 데이터를 표시하고 업데이트합니다.
  1. 프레젠터(Presenter)
  • 모델과 뷰 사이의 중개자 역할을 수행하는 부분
  • 사용자 입력을 처리하고, 모델로부터 데이터를 가져와 뷰에 전달하며, 뷰로부터 사용자 액션을 수신하여 모델을 업데이트
  • MVP 패턴에서 가장 핵심적인 부분으로, 비즈니스 로직과 뷰 간의 결합도를 낮추고 코드를 테스트하기 쉽게 만든다.

5. 그렇다면 예시는?

  • 모델
public class UserModel {
    private String username;
    private String password;

    // Getters and setters

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}
public interface LoginView {
    String getUsername();
    String getPassword();
    void showLoading();
    void hideLoading();
    void showLoginSuccessMessage();
    void showLoginErrorMessage();
}
  • 프레젠터(Presenter)
    • 로그인 버튼이 클릭되면 사용자가 입력한 데이터를 받아와 모델의 데이터와 비교하고, 로그인 성공/실패 여부에 따라 뷰에 결과를 알려주는 역할
ublic class LoginPresenter {
    private LoginView view;
    private UserModel model;

    public LoginPresenter(LoginView view) {
        this.view = view;
        this.model = new UserModel();
    }

    public void onLoginButtonClicked() {
        String username = view.getUsername();
        String password = view.getPassword();

        // 로그인을 위한 비즈니스 로직 처리
        if (username.equals("user123") && password.equals("password123")) {
            view.showLoading();
            // 모델 업데이트 등의 작업 수행
            // ...

            view.hideLoading();
            view.showLoginSuccessMessage();
        } else {
            view.showLoginErrorMessage();
        }
    }
}

6. 결론

  • 안드로이드 앱 개발에 많이 사용되며, MVC의 Controller가 비즈니스 로직과 뷰의 역할을 동시에 담당하는 것을 프레젠터로 바꿔 보완하여 코드의 재사용성과 유지보수성을 향상시킨 디자인 패턴
  • 프레젠터를 통해 뷰와 모델이 서로 직접적으로 상호작용하지 않고, 중개자를 통해 통신하게 되므로 코드의 결합도가 낮아지고 테스트가 용이
profile
내 지식을 기록하여, 다른 사람들과 공유하여 함께 발전하는 사람이 되고 싶다. gitbook에도 정리중 ~

0개의 댓글