본문 바로가기
[android] Referencing complex data using Room - Room 에 대해 알아보자 - Room 은 primitive 와 boxed type 에 대한 converting 기능을 제공한다. 그렇지만 object reference 에 대한 converting 은 제공하지 않는다. Use type converters - Single db column 에 custom data type 을 mapping 하고 싶을 때가 있을 것이다. 이 기능을 지원하기 위해서는 TypeConverter 를 제공해야 하는데, 이 녀석은 custom class 를 Room 이 아는 type 으로 변환하는 기능을 제공한다. 예를 들어 Date 를 TypeConverter 를 통해 Unix timestamp 형태로 변환할 수 있다. class Converters{ @TypeConverter fun fromTimesta.. 2021. 5. 5.
[android] Testing your database - Room 에 대해 알아보자 - 2가지 테스트 방법이 있다. 하나는 android 단말에서 테스트. 다른 하나는 host 개발 장비에서 (not recommended) - 테스트를 앱에서 돌릴 때 Room 은 DAO class 에 대한 mock 생성을 허용한다. 그래서 full db 를 만들 필요 없이 테스트 할 수 있다. 이 기능은 DAO 가 db 에 대한 detail 을 제공하지 않기에 가능하다. Test on an Android device - db 테스트로 권유되는 방법은 Android 단말 위에서 도는 JUnit test 를 돌리는 것이다. 이 테스트는 acivity 를 만들 필요도 없고, UI test 보다 훨씬 빠르기 떄문이다. - test 를 세팅하면, in-memory version 의 db 를 만들어 테스트 하면 .. 2021. 5. 4.
[android] Migrating Room databases - Room 에 대해 알아보자 - Room 은 Migration class 를 써서 db 변화가 있을 때 migrate 를 할 수 있게 해준다. Migration class 는 startVersion 과 endVersion 을 명시한다. runtime 에 Room 은 각각의 Migration class 의 migrate() 함수를 호출해준다. val MIGRATION_1_2 = object : Migration(1, 2){ override fun migrate(db: SupportSQLiteDatabase){ db.execSQL("CREATE TABLE 'Fruit' ('id' INTEGER, 'name' TEXT, PRIMARY KEY('id'))") } } val MIGRATION_2_3 = object : Migration(2,.. 2021. 5. 3.
[android] Create views into a database - Room 에 대해 알아보자 - 2.1.0 이상 버전에서는 Room 에서 SQLite database 의 views 를 지원한다. Room 은 이런 query-backed class 들을 view 라고 부르며, 이것들은 DAO 에서 일반적인 data object 처럼 취급할 수 있다. - entity 와 같이 SELCT 를 view 에 대해서 수행할 수 있다. 그러나 INSERT, UPDATE, DELETE 를 view 에 대해서 수행할 수는 없다. Create a view - View 를 만들기 위해서는 @DatabaseView annotation 을 사용하면 된다. 이 annotation 에 query 값을 지정하면 된다. @DatabaseView(""" SELECT user.id, user.name, user.departmen.. 2021. 5. 2.
[android] Define relationships between objects - Room 에 대해 알아보자 - SQLite 는 relational db 이기 때문에, object 간의 관계를 정의할 수 있다. 대부분의 ORM lib 이 entity object 간에 상호 참조를 지원하지만, Room 은 명시적으로 이것을 금지한다. 금지한 기술적 이유는 아래와 같다. Understand why Room doesn’t allow object references (중략된 번역) https://developer.android.com/training/data-storage/room/referencing-data.html#understand-no-object-references - Room 은 entity class 간 object reference 를 허용하지 않는다. 대신 명시적으로 앱이 필요에 따라 data 를 요.. 2021. 5. 1.
[android] Accessing data using Room DAOs - Room 에 대해 알아보자 - Dao 는 Room 의 메인 컴퍼넌트로, 각각의 DAO 는 app db 에 접근하는 추상적인 방법을 제공한다. 직접 query 하거나 queryBuilder 를 통해 data 에 접근하는 대신, 각각의 컴퍼넌트에 대해 분리된 접근을 할 수 있다. 게다가 DAO 는 test 를 위한 mock db access 를 제공하기가 쉬워진다. - DAO 는 interface 나 abstract class 가 될 수 있다. abstract class 라면, constructor 를 통해서 RoomDatabase 를 유일한 param 으로 받을 수 있다. Room 은 각각의 DAO 를 compile time 에 생성한다. - Room 은 builder 에서 allowMainThreadQueries() 를 호출하기 .. 2020. 8. 18.
반응형