새로운 아키텍쳐나 신기술을 알려줌

 

 

 

안드로이드 패턴은 종류가 다양하다

기본적인 패턴은 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

 

codingspecialist/Android-MVVM-AAC-V1

Contribute to codingspecialist/Android-MVVM-AAC-V1 development by creating an account on GitHub.

github.com

 

----

뷰모델 - 뷰 연결하기

 

뷰모델 만들기

 

옵저버로 구독하기

 

위 코드는 선언만 해놔서 오류가난다(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/

 

[Android] LiveData + ViewModel 사용해보기 - Junghoon's Blog

Android Architecture Components - ViewModel

Junghun0.github.io

-----------

 

 

 

 

 

 

 

 

구독패턴(LiveData, ViewModel 등을 공부)

https://medium.com/@maryangmin/android-architecture-components-%EC%86%8C%EA%B0%9C-1-8e04491be1f6

 

Android Architecture Components 소개 (1)

Google I/O 2017에서 새로운 라이브러리들을 Android Architecture Components(AAC)로 묶어서 발표하였습니다. Google은 AAC를 안드로이드 앱을 개발하면서 자주 만날 수 있는 문제들을 쉽게 해결할 수 있는…

medium.com

 

 

Lifecycles - 

액티비티의 상태데이터는 액티비티가 들고 있다

화면을 움직인다는 것은 요소를 파괴하고 재생성

데이터 관리가 안됨

그래서 데이터 보관을 뷰모델이 한다 -  즉 액티비티의 데이터를 뷰모델이 들고 있다 - 생명주기의 영향을 받지 않는다

액티비티가 뷰모델을 구독하게 함

 

----------------

 

 

 

 

 

 

 

프로그래밍의 목적은 데이터베이스의 내용과 동기화 하는 것을 따라감

// DB내용변경 -> 어댑터 데이터 변경 -> UI 갱신
// MVVM의 경우 DB내용변경 -> 어댑터 데이터 변경시 UI 자동갱신
// 리액티브 프로그래밍의 경우 DB내용변경시 어댑터 데이터 자동갱신 +UI 자동갱신

--------

'App > Android' 카테고리의 다른 글

안드로이드 // MVVM  (0) 2020.08.06
안드로이드 // AAC  (0) 2020.08.06
안드로이드 // 액션바 바꾸기  (0) 2020.08.06
안드로이드 // Room 사용법  (0) 2020.08.06
안드로이드 // 음악 파일 등 받을 때  (0) 2020.08.06

 

액션바 바꾸기

onCreateOptionsMenu 액션바에 메뉴 넣기

 

 

 

----------

 

https://blog.naver.com/getinthere/221695431132

 

안드로이드 7강 - (1) SQLite 추상화 객체 room 사용해보기

1. ROOM 의존성https://developer.android.com/topic/libraries/architecture/room?gclid=Cj0K...

blog.naver.com

 

Room

새프로젝트

 

 

데이터베이스에서 IO할때는 무조건 쓰레드 써야함

기존SQLite는 쿼리문을 직접짜야하는데 - 교재 536페이지

Room을 이용하면 JPA와 비슷하다 (ORM : 오브젝트 릴레이션 모델) - 네이밍쿼리 공부

Room 의존성

https://developer.android.com/topic/libraries/architecture/room

 

Room 지속성 라이브러리  |  Android 개발자  |  Android Developers

Room 라이브러리 사용 방법을 알아봅니다.

developer.android.com

 

room 디펜던시 추가

 

lombok 디펜던시 추가

 

User엔티티

 

UserRepository

 

view - dao - db

dao에는 쿼리문이 모여있다

JPA나 ROOM과 같은 ORM은 영속성 컨텍스트를 들고 있다 (영속성 : rs를 가져와서 저장)

-1번유저를 가져온다면 - 영속성 컨텍스트에 데이터가 있는지 확인 
- 없다면 DB에서 가져와서 영속성 컨텍스트에 저장 + 데이터를 넘겨준다
- 있다면 영속성 컨텍스트에 저장된 데이터를 넘겨준다 
(캐시기능 LRU방식)

 

 

 

 

UI에서 실행하면 오류가난다

 

.fallbackToDestructiveMigration() // 2번째 배포부터 추가 / 스키마의 버전 변경이 가능
.allowMainThreadQueries() // 메인쓰레드에서 DB에 IO를 가능하게 해줌 (테스트용임 원래는 쓰레드를 만들어야함)

 

 

내부적으로 회원가입 없이 유저의 데이터를 이용해서 앱을 쓰게 하는 것!

 

데이터베이스에서 다시 가져와보자

 

 

하나만 뽑기위해 findByUid 추가

 

 

 

 

 

---------------------

 

'App > Android' 카테고리의 다른 글

안드로이드 // 액션바 바꾸기  (0) 2020.08.06
안드로이드 // Room 사용법  (0) 2020.08.06
안드로이드 // 서비스 파일 생성 팁  (0) 2020.08.06
안드로이드 // 서비스  (0) 2020.08.06
안드로이드 // 패턴  (0) 2020.08.06

 

 

 

 

 

 

 

AndroidManifest.xml

위 처럼 ide를 통해 만들면 안드로이드 메니페스트에 자동으로 등록된다

 

 

'App > Android' 카테고리의 다른 글

안드로이드 // Room 사용법  (0) 2020.08.06
안드로이드 // 음악 파일 등 받을 때  (0) 2020.08.06
안드로이드 // 서비스  (0) 2020.08.06
안드로이드 // 패턴  (0) 2020.08.06
안드로이드 // 200806 정리  (0) 2020.08.06

 

서비스

앱이 실행되어있지 않거나 보이지 않아도 카톡은 다른사람이 보낸 메시지를 받을 수 있다

백그라운드에서 실행되는 서비스가 있기 때문

서비스란 백그라운드에서 실행되는 앱의 구성요소를 말한다

액티비티 처럼 시스템에서 관리한다

액티비티를 만들 때 매니페스트파일에 등록했던 것처럼 새로 만든 서비스도 매니페스트 파일에 꼭 등록해야 한다

서비스를 실행하려면 startService()메서드를 호출 하면 된다

서비스가 비정상적으로 종료되더라도 시스템이 자동으로 재실행한다

startService()메서드를 호출할때 인텐트 객체를 파라미터로 전달

인텐트 객체는 어떤 서비스를 실행할 것인지에 대한 정보를 담고 있다

서비스를 여러번 호출해도 서비스는 이미 메모리에 만들어져있으므로

onService 대신 onStartCommand()메서드를 실행한다

실행된 서비스를 종료하려면 stopService() 메서드 호출

IntentService는 필요한 함수가 수행되고나면 종료된다

IntentService의 함수 (onHandleIntent() : onStartCommand() 메서드로 전달된 인텐트를 전달 받으면서 실행되고 함수실행이 끝나면 종료)

---------------------

+ Recent posts