투케이2K

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

투케이2K 알고리즘

56. (TWOK/ALGORITHM) [Android] 패턴 - MVVM (Model , View , ViewModel) 형태 로직 구현 실시

투케이2K 2022. 8. 27. 17:52

[환경 설정 및 설명]

언 어 : Android (Java)

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

 

[클래스 구조]

 

[요약 설명]

    /**
     * TODO [클래스 설명]
     * // -----------------------------------------
     * 1. MVVM 패턴 동작 수행 클래스
     * // -----------------------------------------
     * 2. MVVM 구성 :
     *  - M (모델) : 데이터 조작 (저장, 호출) 관련 클래스
     *  - V (뷰) : 사용자에게 표시되는 화면 및 액티비티 클래스
     *  - VM (뷰 모델) : 뷰 를 나타내주기 위한 [모델 + 뷰] 의 로직 담당
     * // -----------------------------------------
     * 3. MVVM 동작 :
     *  - 사용자가 UI 화면 확인 (뷰 : XML)
     *  - 사용자가 UI 동작 수행 (뷰 : Activity)
     *  - 뷰는 뷰 모델로 이벤트 전파 (뷰 <-> 뷰 모델)
     *  - 뷰 모델과 모델의 데이터 상호 작용 수행 (뷰 모델 <-> 모델)
     *  - 뷰 모델은 뷰 화면 업데이트 수행 실시 (뷰 모델)
     * // -----------------------------------------
     * 4. MVVM 장점 및 단점 :
     *  - 뷰에 대한 의존성이 없으므로 유닛 테스트에 용이하다
     *  - 중복되는 코드를 모듈화 할 수 있음
     *
     *  - 뷰 모델의 설계가 어렵다
     *  - 뷰 모델이 또 다른 형태의 액티비티 클래스 구현으로 변질될 수 있음
     * // -----------------------------------------
     * */
 

[Model - 소스 코드]

package com.example.testapp.MvvmPattern;

public class Model {


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


    // TODO [클래스 생성자 초기화]
    public Model(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.MvvmPattern;

import android.os.Bundle;
import android.util.Log;

import androidx.appcompat.app.AppCompatActivity;

import com.example.testapp.R;

public class View extends AppCompatActivity {


    /**
     * TODO [클래스 설명]
     * // -----------------------------------------
     * 1. MVVM 패턴 동작 수행 클래스
     * // -----------------------------------------
     * 2. MVVM 구성 :
     *  - M (모델) : 데이터 조작 (저장, 호출) 관련 클래스
     *  - V (뷰) : 사용자에게 표시되는 화면 및 액티비티 클래스
     *  - VM (뷰 모델) : 뷰 를 나타내주기 위한 [모델 + 뷰] 의 로직 담당
     * // -----------------------------------------
     * 3. MVVM 동작 :
     *  - 사용자가 UI 화면 확인 (뷰 : XML)
     *  - 사용자가 UI 동작 수행 (뷰 : Activity)
     *  - 뷰는 뷰 모델로 이벤트 전파 (뷰 <-> 뷰 모델)
     *  - 뷰 모델과 모델의 데이터 상호 작용 수행 (뷰 모델 <-> 모델)
     *  - 뷰 모델은 뷰 화면 업데이트 수행 실시 (뷰 모델)
     * // -----------------------------------------
     * 4. MVVM 장점 및 단점 :
     *  - 뷰에 대한 의존성이 없으므로 유닛 테스트에 용이하다
     *  - 중복되는 코드를 모듈화 할 수 있음
     *
     *  - 뷰 모델의 설계가 어렵다
     *  - 뷰 모델이 또 다른 형태의 액티비티 클래스 구현으로 변질될 수 있음
     * // -----------------------------------------
     * */





    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // -----------------------------------------
        // TODO MVVM : VIEW : [액티비티 레이아웃 지정 실시]
        setContentView(R.layout.a_mvvm_layout);
        // -----------------------------------------


        // -----------------------------------------
        Log.i("---","---");
        Log.d("//===========//","================================================");
        Log.i("","\n"+"[View >> onCreate() :: 액티비티 수행 실시]");
        Log.d("//===========//","================================================");
        Log.i("---","---");
        // -----------------------------------------


        // -----------------------------------------
        // TODO MVVM : 뷰 모델 초기화 수행 실시
        ViewModel viewModel = new ViewModel(View.this);
        // -----------------------------------------

    } // [메인 종료]

} // [클래스 종료]
 

[ViewModel - 소스 코드]

package com.example.testapp.MvvmPattern;

import android.app.Activity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.example.testapp.R;

public class ViewModel {


    // TODO [전역 변수 선언]
    private Activity activity; // [액티비티]
    private Model model; // [모델]


    // TODO [컴포넌트 선언]
    private TextView textView;
    private Button button;


    // TODO [클래스 생성자 초기화]
    ViewModel(Activity activity){
        this.activity = activity; // [액티비티 설정]
        this.model = new Model("투케이", 29); // [모델 설정]

        initView(); // [뷰 초기화]
    }


    // TODO [뷰 초기화 및 이벤트 지정]
    private void initView(){

        // [컴포넌트 매핑 수행 실시]
        textView = activity.findViewById(R.id.textView);
        button = activity.findViewById(R.id.button);


        // [이벤트 정의 실시]
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                // [텍스트 뷰 데이터 지정]
                textView.setText(model.getUserInfo());
            }
        });
    }

}
 

[결과 출력]

 

 
반응형
Comments