투케이2K

52. (TWOK/ALGORITHM) [Android] 패턴 - MVP (Model , View , Presenter) 형태 로직 구현 실시 본문

투케이2K 알고리즘

52. (TWOK/ALGORITHM) [Android] 패턴 - MVP (Model , View , Presenter) 형태 로직 구현 실시

투케이2K 2022. 8. 22. 18:08

[환경 설정 및 설명]

언 어 : Android (Java)

설 명 : 패턴 - MVP (Model , View , Presenter) 형태 로직 구현 실시

 

[요약 설명]

    /**
     * TODO [클래스 설명]
     * // -----------------------------------------
     * 1. MVP 패턴 동작 수행 클래스
     * // -----------------------------------------
     * 2. MVP 구성 :
     *  - M (모델 / Model) : 데이터 조작 (저장, 호출) 관련 클래스
     *  - V (뷰 / View) : 사용자에게 표시되는 화면 및 액티비티 클래스 (안드로이드 XML 레이아웃 / Activity 및 Fragment 클래스)
     *  - P (제공자 / Presenter) : 모델 , 뷰 를 연결하는 브릿지 (다리) 역할 (인터페이스 : 뷰에 직접 연결되는 것이 아님)
     * // -----------------------------------------
     * 3. MVP 동작 :
     *  - 사용자가 UI 화면 확인 (뷰 : XML)
     *  - 사용자가 UI 동작 수행 (뷰 : Activity)
     *  - Presenter 를 통해 이벤트 알림 전달 (뷰 <-> Presenter)
     *  - Presenter 에서 모델 데이터 설정 (Presenter <-> 모델)
     *  - Presenter 에서 설정한 데이터를 얻어온다 (Presenter <-> 모델)
     *  - Presenter 에서 사용자 UI 변경 상태 알림 전달 (Presenter <-> 뷰)
     *  - 사용자 UI 변경 수행 실시 (뷰)
     * // -----------------------------------------
     * 4. MVP 참고 사항 :
     *  - Presenter 는 모델, 뷰를 연결하는 브릿지 역할을 수행 (인터페이스 : 뷰에 직접 연결되는 것이 아님)
     *  - 뷰는 사용자 UI 화면을 보여주는 것이며, 직접적으로 모델에 접근 불가 (XML / Activity)
     *  - 모델은 데이터 저장, 호출, 데이터 가공 등 비즈니스 로직을 작성할 수 있으며, 직접적으로 뷰에 접근 불가
     * // -----------------------------------------
     * */
 

[프로젝트 구성]

 

[Model : 소스 코드]

package com.example.testapp.MVP;

public class Mvp_Model {


    // TODO [전역 변수 선언]
    private String name = "";
    private int age = 0;


    // TODO [클래스 생성자 초기화]
    public void setUserInfo(String name, int age){
        this.name = name;
        this.age = age;
    }


    // TODO [get 데이터 호출 메소드 정의]
    public String getUserInfo(){
        return "이름 : " + String.valueOf(name) + " / " + "나이 : " + String.valueOf(age);
    }
}
 

[View : 소스 코드]

package com.example.testapp.MVP;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

import com.example.testapp.R;

public class Mvp_View extends AppCompatActivity implements MyView { // TODO [UI 변경 수행을 위해 MyView 상속]


    /**
     * TODO [클래스 설명]
     * // -----------------------------------------
     * 1. MVP 패턴 동작 수행 클래스
     * // -----------------------------------------
     * 2. MVP 구성 :
     *  - M (모델 / Model) : 데이터 조작 (저장, 호출) 관련 클래스
     *  - V (뷰 / View) : 사용자에게 표시되는 화면 및 액티비티 클래스 (안드로이드 XML 레이아웃 / Activity 및 Fragment 클래스)
     *  - P (제공자 / Presenter) : 모델 , 뷰 를 연결하는 브릿지 (다리) 역할 (인터페이스 : 뷰에 직접 연결되는 것이 아님)
     * // -----------------------------------------
     * 3. MVP 동작 :
     *  - 사용자가 UI 화면 확인 (뷰 : XML)
     *  - 사용자가 UI 동작 수행 (뷰 : Activity)
     *  - Presenter 를 통해 이벤트 알림 전달 (뷰 <-> Presenter)
     *  - Presenter 에서 모델 데이터 설정 (Presenter <-> 모델)
     *  - Presenter 에서 설정한 데이터를 얻어온다 (Presenter <-> 모델)
     *  - Presenter 에서 사용자 UI 변경 상태 알림 전달 (Presenter <-> 뷰)
     *  - 사용자 UI 변경 수행 실시 (뷰)
     * // -----------------------------------------
     * 4. MVP 참고 사항 :
     *  - Presenter 는 모델, 뷰를 연결하는 브릿지 역할을 수행 (인터페이스 : 뷰에 직접 연결되는 것이 아님)
     *  - 뷰는 사용자 UI 화면을 보여주는 것이며, 직접적으로 모델에 접근 불가 (XML / Activity)
     *  - 모델은 데이터 저장, 호출, 데이터 가공 등 비즈니스 로직을 작성할 수 있으며, 직접적으로 뷰에 접근 불가
     * // -----------------------------------------
     * */





    // TODO [빠른 로직 찾기 : 주석 로직 찾기]
    /**
     * // -----------------------------------------
     * // [SEARCH FAST] : []
     * // -----------------------------------------
     */





    // TODO [전역 변수 선언 실시]
    Mvp_Presenter mvp_presenter;
    TextView textView;
    Button button;





    // TODO [액티비티 생명 주기 상태 체크 메소드]
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // -----------------------------------------
        // TODO MVC : VIEW : [액티비티 레이아웃 지정 실시]
        setContentView(R.layout.a_mvp_layout);
        // -----------------------------------------


        // -----------------------------------------
        // TODO [컴포넌트 매핑 실시]
        textView = (TextView) findViewById(R.id.textView);
        button = (Button) findViewById(R.id.button);
        // -----------------------------------------


        // -----------------------------------------
        // TODO [뷰, 모델을 연결해주는 Presenter 클래스 객체 생성]
        mvp_presenter = new Mvp_Presenter(Mvp_View.this);
        // -----------------------------------------


        // -----------------------------------------
        // TODO [버튼 클릭 이벤트 리스너 생성 실시]
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                // TODO [Presenter 호출 >> Model 데이터 설정 실시]
                mvp_presenter.setData("투케이", 29);

                // TODO [Presenter 호출 >> Model 에 저장된 데이터 얻어온다 >> textViewChange 부분에서 UI 변경 실시]
                mvp_presenter.getData();
            }
        });
        // -----------------------------------------

    } // TODO [메인 종료]



    // TODO [UI 화면 변경 수행 동작 메소드]
    @Override
    public void textViewChange(String data) {

        // [텍스트 뷰에 데이터 지정 실시]
        textView.setText(data);
    }


} // TODO [클래스 종료]
 

[Presenter : 소스 코드]

package com.example.testapp.MVP;


// TODO [인터페이스 정의 실시]
interface MyView { // [뷰 관리 인터페이스]
    void textViewChange(String data);
}
interface Presenter { // [모델 , 뷰 연결 인터페이스]
    void setData(String name, int age);
    void getData();
}


// TODO [클래스 정의 실시]
public class Mvp_Presenter implements Presenter {

    // [전역 변수 선언]
    private Mvp_Model mvp_model; // [모델 클래스]
    private MyView myView; // [뷰 관리 인터페이스]


    // [클래스 생성자 초기화]
    public Mvp_Presenter(MyView myView){
        this.mvp_model = new Mvp_Model();
        this.myView = myView;
    }


    // [implements : 인터페이스 메소드 구현]
    @Override
    public void setData(String name, int age) {

        // [모델 데이터 설정 실시]
        this.mvp_model.setUserInfo(name, age);
    }


    // [implements : 인터페이스 메소드 구현]
    @Override
    public void getData() {

        // [모델 데이터 호출 실시]
        String userInfo = this.mvp_model.getUserInfo();

        // [뷰에 데이터 표시 수행 실시]
        this.myView.textViewChange(userInfo);
    }

} // TODO [클래스 종료]

 

반응형
Comments