티스토리 뷰

반응형

Room Persistence Library

: SQLite 객체 매핑 라이브러리

(Android Jetpack의 구성요소)

 

특징 

- 상용구 코드(boilerplate code)를 피하고, SQLite 테이블 데이터를 자바 객체로 쉽게 변환 가능

- SQLite 에 대한 완벽한 활용이 가능하며, 데이터 베이스 액세스를 지원하는 추상화 계층을 제공

- 기기 내에 캐시를 만들 수 있어, 인터넷 연결 여부와 관계 없이 일관된 형태로 데이터 제공

 

-  Less boilerplate code

- Compile-time checked queries

- Ease of implementing migrations

- High degree of testability

- Keeping database work away from the main thread.

boilerplate code

: 수정하지 않거나, 적은 양의 수정만을 필요로 하며, 여러곳에서 필수적으로 사용하는 코드 - 재사용가능한 코드

- boilerplate code를 피해야 하는 이유

최소한의 작업을 위해 많은 분량의 코드를 작성하게 됨.

 

구성 요소

: RoomDatabase 내에 entity와 dao가 포함된다.

- Entity : 데이터베이스 내에 생성될 테이블 정의

@Entity(tableName="TABLE_NAME") : data 클래스에 해당 어노테이션을 이용하여 Entity임을 정의하고, 테이블 명을따로 설정할 수 있음

@ColumnInfo(name="COLUMN_NAME") : 테이블에 저장될 컬럼명을 설정할 수 있음

 

- Dao :  데이터베이스 내의 데이터를 접근하기 위한 객체 

@Dao : 해당 어노테이션을 이용하여 Dao 객체를 Interface로 정의함

Room에서 제공하는 메소드

@Insert : 단일 트랜잭션으로 모든 매개변수를 데이터베이스에 삽입하도록 구현되어 있음

@Update : 동일한 primary key 를 통해 변경된 항목을 수정하도록 구현되어 있음

@Delete : 

@Query : 만약 리턴 값이 없을 경우 Optional을 적용

@RowQuery : "SupportSQLiteQuery" 를 이용하여 query를 작성하는 메소드

( * RowQuery를 제외한 나머지 메소드들은 컴파일 타임에서 빌드되기 때문에 Exception 발생을 즉시 알 수 있음, RowQuery는 런타임 시에 빌드 됨 )

 

- 데이터베이스의 데이터 접근 시 발생하는 에러

java.lang.IllegalStateException : main thread에서는 database에 접근할 수 없음!! - 잠재적으로 ui thread에 대한 응답이 오래 걸릴 수 있기 때문에 ... 

 

Asynchronous queries : 메소드를 비동기식으로 설정, 메인 스레드에서 이러한 메서드를 실행할 수 없음

- Maybe<T> 

- Single<T> 

Observable queries : 쿼리 실행을 통해 데이터 변경 시 앱 UI가 자동으로 업데이트 되기를 원할 때 LiveData 유형을 반환 값으로 사용.

- LiveData<T>

- Flowable<T> 

 

- Database Migrations : 데이터베이스 변경(스키마 변경, 컬럼 추가, 타입 변경, 이름 변경 등)데이터베이스에게 어떻게 처리시킬 것인지 알려줘야 함.

처리 순서

1) 데이터베이스 버전 변경 

2) 어떻게 통합시킬 것인지 설정

3) 데이터베이스 빌드 시 설정한 Migrations 추가

- 만약 통합을 원하지 않는다면, fallbackToDestructiveMigration 메소드를 이용하여 데이터베이스를 제거하고 다시 생성한다. 

 


데이터베이스 테스트 

: JUnit을 이용하여 테스트 실행 (AndroidJUnit4)

Room의 InMemoryDatabaseBuilder를 이용함 - InMemory는 실행이 종료되면 데이터베이스가 destroy 되기 때문에 테스트 시 많이 사용함. 

( + 유튜브의 Android Jetpack: Room 을 통해서 다양한 테스트 팁을 확인할 수 있음)

 

 

*boilerplate code

https://ko.wikipedia.org/wiki/%EC%83%81%EC%9A%A9%EA%B5%AC_%EC%BD%94%EB%93%9C

 

상용구 코드 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 컴퓨터 프로그래밍에서 상용구 코드 또는 상용구는 수정하지 않거나 최소한의 수정만을 거쳐 여러 곳에 필수적으로 사용되는 코드를 말한다. 이와 같은 코드��

ko.wikipedia.org

* Room

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

-https://developer.android.com/topic/libraries/architecture/room?gclid=EAIaIQobChMIobTS9cv26QIVEsEWBR3LSAiSEAAYASAAEgJhAPD_BwE&gclsrc=aw.ds

-https://www.youtube.com/watch?v=SKWh4ckvFPM

-https://developer.android.com/reference/androidx/room/RawQuery

-https://developer.android.com/training/data-storage/room/accessing-data?hl=ko

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
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
글 보관함