안드로이드 // MVVM
새로운 아키텍쳐나 신기술을 알려줌
안드로이드 패턴은 종류가 다양하다
기본적인 패턴은 MVC
MVC - 웹
MVP - 앱 - 프레젠테이션
MVVM - 데이터변경하면 자동으로 뷰에 데이터가 들어간다
MVVM + 레트로핏 + (스프링 5.0 리액티브 (톰캣이 아닌 네티서버))
톰캣 - 리퀘스트 - 쓰레드 생성(리퀘스트수만큼 생성) - 실행
네티 - 쓰레드를 하나로 프로미스를 이용해서 동시실행 (노드js가 사용한다)
쓰레드 여러개 - 컨텍스트 스위칭시 버퍼에 저장해서 순차 실행
혹시 네티 공부한다면 네티서버가 왜 좋은지 분석
클라우드 서버도 리액티브 서버이다 (몽고DB)
조인하면 연관된 데이터 다뽑아냄
NOSQL (몽고DB)
- JSON을 사용한다
- 관계형 데이터베이스에서는 속성에 단일속성을 넣는데,
NOSQL (몽고DB) JSON이라서 속성에 오브젝트 또는 오브젝트 배열
- 처리속도가 빠르다
- SELECT 시 빠르다
- INSERT UPDATE DELETE 시 느리다
- 일관성이 깨진다
- 수정의 속도를 버리고 SELECT의 퍼포먼스를 올린다
은행은 신뢰성이 중요하기 때문에 관계형데이터베이스를 사용한다
참고
https://github.com/codingspecialist/Android-MVVM-AAC-V1
----
뷰모델 - 뷰 연결하기
뷰모델 만들기
옵저버로 구독하기
위 코드는 선언만 해놔서 오류가난다(DB에 연결하면 해결)
// 라이브데이터는 new해서 만드는게 아니다
// DB에 연결되어있으면 선언만 하면 되는데, 지금은 그게 안되기 때문
// LiveData는 함수가 getter만 있음
// MutableLiveData는 함수가 getter setter 둘 다 있음
// DB에 연결해서 쓸 때는 무조건 LiveData
// 레트로핏2 등을 사용할 때에는 MutableLiveData
데이터가 변경되면 옵저버가 관찰하고 있다가 뷰의 데이터를 변경한다
이까지로 프로젝트 하면된다
----------
VM뷰모델 - Repository - 레트로핏2 - 서버
--------------
DB에서 리파지토리로 받는 타입이 중요하다
레파지토리가
MutableLiveData (변하는데이터)
DB에서 다운받은 데이터를 연결시키면
Room이랑 연결된다
인서트 딜리트 등을 비동기 쓰레드 asynctask로 돌림
------------
예제 따라해보기
https://junghun0.github.io/2019/05/22/android-viewmodel/
-----------