ViewModel은 Android Architecture Components 라이브러리의 일부로 제공되는 클래스로, 안드로이드 앱의 UI 관련 데이터를 관리하고 수명 주기에 따른 데이터 유지를 지원합니다. ViewModel은 화면 회전 및 구성 변경과 같은 활동(Activity) 또는 프래그먼트(Fragment)의 재생성 시 데이터를 보존하고, 화면과 관련된 데이터 및 비즈니스 로직을 분리하여 유지보수성을 높이는 데 사용됩니다.
여기에 간단한 예제를 제시해 보겠습니다. 이 예제에서는 ViewModel을 사용하여 두 개의 정수를 더하는 기능을 구현할 것입니다.
먼저, Gradle 파일에 Android Architecture Components의 ViewModel 라이브러리를 추가해야 합니다.
다음으로, 더하기 연산을 수행하는 ViewModel 클래스를 작성합니다.
import androidx.lifecycle.ViewModel;
public class CalculatorViewModel extends ViewModel {
private int result = 0;
public int getResult() {
return result;
}
public void add(int a, int b) {
result = a + b;
}
}
그 다음으로, 액티비티(Activity)나 프래그먼트(Fragment)에서 이 ViewModel을 사용하여 UI와 상호작용할 수 있습니다.
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.ViewModelProvider;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private CalculatorViewModel viewModel;
private EditText editTextA;
private EditText editTextB;
private Button addButton;
private TextView resultTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// ViewModel 인스턴스 생성
viewModel = new ViewModelProvider(this).get(CalculatorViewModel.class);
// UI 요소 초기화
editTextA = findViewById(R.id.editTextA);
editTextB = findViewById(R.id.editTextB);
addButton = findViewById(R.id.addButton);
resultTextView = findViewById(R.id.resultTextView);
addButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 사용자가 입력한 두 정수 가져오기
int a = Integer.parseInt(editTextA.getText().toString());
int b = Integer.parseInt(editTextB.getText().toString());
// ViewModel을 사용하여 두 정수를 더하고 결과를 가져오기
viewModel.add(a, b);
int result = viewModel.getResult();
// 결과를 TextView에 설정
resultTextView.setText("결과: " + result);
}
});
}
}
이 예제에서는 사용자가 입력한 두 개의 숫자를 가져와 ViewModel을 통해 더하고, 결과를 TextView에 표시합니다. 이렇게 함으로써 ViewModel은 UI와 밀접하게 연결되어 있지만, 화면의 상태 변경에도 데이터를 보존하여 화면 회전과 같은 이벤트에서도 데이터를 안전하게 유지할 수 있습니다.
이 예제를 보면서 WEB 공부를 먼저 했던 저에게는 Service와 비슷하다고 생각되어 찾아보니
안드로이드 앱의 UI 컴포넌트들은 화면 회전, 앱의 재시작 또는 구성 변경과 같은 이벤트에 의해 자주 소멸되고 재생성됩니다. 이러한 상황에서 UI 상태를 유지하고 비즈니스 로직을 처리하기 위해 ViewModel이 사용됩니다. 따라서 ViewModel은 안드로이드 앱의 비즈니스 로직을 처리하고 데이터를 관리하는 역할을 합니다. 이런 면에서 웹 개발에서의 서비스와 비슷한 개념이라고 할 수 있습니다.
또한, ViewModel은 안드로이드의 생명 주기(lifecycle)에 따라 알맞게 동작하여 데이터를 보존하고, 필요한 경우 UI 컴포넌트에 적절한 데이터를 제공합니다. 이는 웹 개발에서의 서비스가 클라이언트와 상호작용하여 데이터를 제공하는 것과 유사합니다.
'코딩 > 안드로이드(android)' 카테고리의 다른 글
[android] <receiver> 알아보기 (0) | 2024.04.13 |
---|---|
소프트웨어 아키텍처 (0) | 2024.04.12 |
안드로이드 앱의 전반적인 프로젝트 흐름 (0) | 2024.04.12 |
안드로이드 클린 아키텍처 (0) | 2024.04.11 |
댓글