본문 바로가기

안드로이드

안드로이드 패턴 M V VM -room

 

왜 한가지 언어만 고집하면 안되는지

어떨 때 어떤 디비를 써야할지

 

코드코드하나하나를 잘한다는 것보다

 

초급에서 중급으로 성장할 때는 가장 중요한게

 

전체적인 숲을 볼 수 있어야 한다.

 

대기업

중소기업 :  실무에 바로 일할 수 있는 정도

 

초급 : 

안좋은 회사는 CRUD만 해도 취업

괜찮은 회사는 알고리즘, 기본기 튼튼, 실무

 

숲을 봐야함

 

클린코드, 설계, DDD, TDD

 

 

안드로이드 프리렌서

 

신입보다는 바로 만들 내가 

 

처음에 청약 2만원 청년대출

 

1, 2년차때는 놀면서 공부하기

 

 


MVC패턴

 

로그인페이지

메인페이지

 

업데이트 추가 DML요청 (insert, update)

 

다 셀렉트안하고 부분만 가져옴

1. 데이터 변경

2. UI변경

 

이렇게 하는 게 별로...

 

https://developer.android.com/topic/libraries/architecture/room?gclid=Cj0KCQiA_rfvBRCPARIsANlV66MiaVR-N-UKQXgBGhlyJCqhDsP8F94bw0SEqOphmQtESQvUc9xl750aAjvGEALw_wcB

 

 

 

V  M VM DB인가?

Activity/Fragment -> V

Model(ROOM) SQLLite API, DB, 클라우드 서버 - > M

ViewModel (LiveData) -> VM

 

 

 

M V VM패턴

model, view, viewModel

 

View - ViewModel - Model(API, DB, 클라우드 서버(AWS.......)

 

안들로이드는 클라우드

 

폰 디비만

 

사용자가 view에서 하나 클릭 insert할거다.

 

(MV) list 에 data 1 2 3 가 있는데

버튼 누르면

1 2 3 4 데이터가 이렇게 된다.

 

그럼 실제 디비에 API랑 클라우드 서버에 실제로 데이터를 먼저 변경해야 한다

 

ViewModel은 User랑 Posts들을 들고 있음 약간 Dto랑 비슷 필요한 모델들(데이터들)을 liveData라는 라이브러리(객체)에 V에 필요한 거 다 가지고 있음

 

liveData라는 라이브러리(객체)에 다 들고 있음. //리액트에서 state같은 거다

 

 

그럼 View 는 ViewModel을 구독하고 있다. 

그러면 UI변경(자동으로 반영)

 

구독은 pull아니고 push방식이다. 내가 요청하지 않아도 변경된 거

retrofit으로 디비 변경하면 그 타이밍에 내가 셀렉트해서 MV랑 동기화.

 

내가 다시 셀렉트해서 동기화 API랑 VIewModel를 어느 타이밍에서? 

 

얻느

 

스프링 5.0 reactive 프로그래밍

 

클라우드 서버에서 이 리액티브 프로그래밍 지원해서 스프링서버에 빨대 꽂아서 구독할 수 있기는 하다.

 

sqLite(내장객체)에 연결하면 MV(LiveData)가 M(SQLite)을 구독 할 수 있다.

 

 

 

 

http랑 다르게 소켓통신은 계속 연결되어 있어서 push가 가능

최초 연결(요청)할 때 스트림을 달아서 계속 연결

 


room(ORM)

의존성

 dependencies {
      def room_version = "2.2.5"

      implementation "androidx.room:room-runtime:$room_version"
      annotationProcessor "androidx.room:room-compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor

      // optional - Kotlin Extensions and Coroutines support for Room
      implementation "androidx.room:room-ktx:$room_version"

      // optional - RxJava support for Room
      implementation "androidx.room:room-rxjava2:$room_version"

      // optional - Guava support for Room, including Optional and ListenableFuture
      implementation "androidx.room:room-guava:$room_version"

      // Test helpers
      testImplementation "androidx.room:room-testing:$room_version"
    }
    

 

jpa랑 비슷

 

sqlite라는 저장소가 있어요. sqlite -> 내장객체

질의 쿼리문 똑같이 날릴 수 있어요.

 

room은 ORM이다!

 

Thread돌려야 겠지

 

Room

 

요청을 Entities(저장소)한테 한다. 디비가 아니라

 

View -> Dao(repository) - Insert, select <-> 영속성 컨텍스트 <-> 디비

 

jpa,room은 orm. 영속성 컨텍스트가 있어요 (데이터

lru(Last Recently used)

영속화된 데이터를 DAO가 요청하면 디비에 요청하지 않아도 된다.

 

네이밍쿼리들도 있고 

 

 

 

 

 

'안드로이드' 카테고리의 다른 글

MVVM-AAC  (0) 2020.08.06
contactsApp, TedPermission  (0) 2020.08.05
안드로이드 Service  (0) 2020.08.05
RetrofitConfig  (0) 2020.07.30
안드로이드 debug  (0) 2020.07.30