일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Coroutines
- Kotlin
- 멀티쓰레드
- ViewModel
- 안드로이드
- 람다
- 인스턴스
- AsyncTask
- ViewGroup
- MVVM
- 동기
- Android
- 부자아빠가난한아빠
- 코틀린
- mutable
- 자청
- java
- 언스크립티드
- SharedPreferences
- 코루틴
- 책리뷰
- View
- JNI
- 부자의그릇
- 부의추월차선
- 비동기
- 기업가정신
- NDK
- 타이탄의도구
- 가치생산주의
- Today
- Total
타이탄의 도구들
[Android] ViewModel이란? 본문
Android ViewModel 이란?
ViewModel 은 Activity 나 Fragment 데이터를 준비하고 관리하는 클래스입니다.
또한 나머지 응용프로그램과의 통신 (예: 비즈니스 로직 클래스 호출)도 처리합니다.
비즈니스 로직이란?
데이터를 원하는 형태로 가공하는 눈에 보이지 않는 처리과정
ViewModel 은 항상 스코프(Activity 또는 Fragment)와 관련하여 생성되며
스코프가 활성 상태인 한 유지됩니다.
ex) Activity 인 경우 완료될 때까지. 즉, 구성 변경(예: 회전)으로 인해
ViewModel 소유자(Activity 나 Fragment)가 소멸되는 경우에도 ViewModel 이 소멸되지 않습니다.
새로 생성된 인스턴스가 기존 ViewModel에 다시 연결되는 것입니다.
ViewModel 의 목적은
Activity 또는 Fragment 에서 필요한 정보를 획득하고 유지하는 것입니다.
Activity 또는 Fragment 는 ViewModel 의 변화를
관찰(Observe)할 수 있어야 합니다.
ViewModels는 일반적으로 LiveData 또는 Android Data Binding 을 통해
이 정보를 노출합니다.
당신이 선호하는 프레임워크에서
observability construct(변화를 관찰할 수 있는 구조)를 사용할 수도 있습니다.
ViewModel 의 유일한 역할은 UI에 대한 데이터를 관리하는 것입니다.
View 계층에 접근하거나 Activity 또는 Fragment에 대한
참조를 하지 않아서는 안 됩니다.
(View 변경에 대한 코드는 View에서만)
Activity에서 일반적으로 사용되는 용도는 다음과 같습니다.
public class UserActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.user_activity_layout);
final UserModel viewModel = new ViewModelProvider(this).get(UserModel.class);
viewModel.getUser().observe(this, new Observer<User>() {
@Override
public void onChanged(@Nullable User data) {
// 여기서 UI를 업데이트합니다.
}
});
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
viewModel.doAction();
}
});
}
}
ViewModel :
public class UserModel extends ViewModel {
private final MutableLiveData<User> userLiveData = new MutableLiveData<>();
public LiveData<User> getUser() {
return userLiveData;
}
public UserModel() {
}
void doAction() {
// 여기서 작업에 따라 필요한 비즈니스 로직을 처리하고,
// userLiveData 를 업데이트 합니다.
}
}
ViewModel은 하나의 Activity 안에 있는 여러 다른 Fragment 들 간의
통신 계층(communication layer)으로 사용될 수도 있습니다.
각 Fragment 는 Activity 를 통해 동일한 키를 사용하여
동일한 ViewModel 을 획득할 수 있습니다.
이렇게 하면 Fragments 간의 통신이 디커플 방식으로 이루어지므로
다른 Fragment 와 직접 통신할 필요가 없습니다. (fragment 간의 의존성이 약해짐)
예시) fragment1 <-> ViewModel <-> fragment2
public class MyFragment extends Fragment {
public void onStart() {
UserModel userModel = new ViewModelProvider(requireActivity()).get(UserModel.class);
}
}
감사합니다 :)
'Dev Tools > Android' 카테고리의 다른 글
[Android] 안드로이드 비동기 처리 1(개요) (0) | 2022.07.16 |
---|---|
[Android] AAC 정리 1편 - 앱 아키텍쳐 개요 (0) | 2022.06.06 |
[Android] 구글 인앱결제 이슈 정리 (0) | 2022.05.30 |
[Android] Kotlin 과 Jetpack에 대하여 (0) | 2022.05.29 |
[Android] SharedPreferences에 대하여 (0) | 2022.05.28 |