MVVM 패턴,Ovserver패턴
2019. 10. 8. 14:01ㆍ모바일/Android_Java
MVVM패턴
M : Model
V : View(Activity)
- ViewModel인스턴스를 만들고 관찰한다
contactViewModel = ViewModelProviders.of(this).get(ContactViewModel::class.java)
contactViewModel.getAll().observe(this, Observer<List<Contact>> { contacts ->
// Update UI
})
- 즉, 관찰하고 있던 LiveData가 변하면 무엇을 할 것인지 액션을 지정할 수 있다. 이후 액티비티/프래그먼트가 활성화되어 있다면 View에서 LiveData를 관찰하여 자동으로 변경 사항을 파악하고 이를 수행한다.
onChanged
메소드를 가지고 있다. 즉, 관찰하고 있던 LiveData가 변하면 무엇을 할 것인지 액션을 지정할 수 있다. 이후 액티비티/프래그먼트가 활성화되어 있다면 View에서 LiveData를 관찰하여 자동으로 변경 사항을 파악하고 이를 수행한다.
VM : ViewModel : View에서 필요한 데이터를 Model에 요청하고 응답받은 데이터를 가공하여 View에게 전달
- LiveData선언
요즘 유행하는 패턴이다.. 이것도 모르고 코드분석하다가 큰일날뻔!
//contentView
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
//뷰 얻기
mBiding = MainActivityBinding.inflate(getLayoutInflater());
//리스트뷰, 리사이클러뷰 어댑터내에서 사용
ListItemBinding binding = ListItemBinding.inflate(layoutInflater, viewGroup, false);
//or
ListItemBinding binding = DataBindingUtil.inflate(layoutInflater, R.layout.list_item, viewGroup, false);
//observe 등록?
getViewModel().inputMsg(이게LiveData).ovserve(this,Observer~~~)
//this : LifeCycleOwner가리키며 Activity와 생명주기를 공유한다.
옵저버패턴 :
- 옵저버 패턴은 개개체의 상태 변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드를 통하여 관찰 대상자가 직접 옵저버들에게 통지하여 상태를 동기화 할 수 있도록 하는 디자인 패턴을 의미합니다.
Observable
- 어떤 데이터를 관찰 할 수 있는 형태로 바꾸는 것이 이 클래스의 기본적인 임무다. Observable의 의미인 '관찰 할 수 있는'을 생각해보면 이 클래스가 어떤 일을 해야하는지 짐작 할 수 있을 것이다. 이 클래스는 개념적으로는 어떤 데이터를 Observer가 처리할 수 있도록 포장하는 작업을 담당
Observer
- Observer는 Observable에서 관찰 할 수 있는 형태로 전달한 데이터를 받고 이에 대한 행동을 취한다**. 전달 받은 데이터를 가지고 화면 UI를 업데이트 하든지 아니면 어떤 인자를 서버에 요청해보는지 등등.. 최종적으로 처리할 작업은 이 클래스에서 담당한다
Observer<String> mProfileObserver = new Observer<String>(){
@Override
public void onChanged(@Nullable String name){
~~~~~~
}
}
출처 : https://blog.yena.io/studynote/2019/03/27/Android-MVVM-AAC-2.html**
'모바일 > Android_Java' 카테고리의 다른 글
Realm (0) | 2019.10.14 |
---|---|
DataBinding (0) | 2019.10.14 |
안드로이드에서 자주쓰는 함수 (0) | 2019.10.08 |
RecyclerView (0) | 2019.10.08 |
Instnaceof (0) | 2019.10.08 |