Notice
Recent Posts
Recent Comments
Link
투케이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());
}
});
}
}
[결과 출력]
반응형
'투케이2K 알고리즘' 카테고리의 다른 글
Comments