Room 2

[Android] Room이 생성한 Dao 구현체 확인방법

오늘 @Upsert 어노테이션을 사용해서 Collection 데이터를 넘겼을때 과연 "트랜잭션처리가 되는가?"에 대해서 검증해야할 일이 있었다. Room을 당연한듯이 사용하고는 했지만 너무 추상화되어있어서 내부 동작을 알지 못했다. 당연히- 트랜잭션처리가 될거라고, 되어야만 한다고 생각했지만, 어림짐작으로 그치지 않고 코드로 확실하게 보고싶었다. 안드로이드 빌드를 한번 끝내면 generated/build에 내 Dao이름 + _Impl 이름으로 Dao의 구현체에대한 Java Class가 생성되어있는 것을 볼 수 있다. upsert 함수가 이렇게 트랜잭션으로 감싸져 있는것을 확인했고, Room에 대한 흐릿한 불신을 지울 수 있게 되었다.@Override public Object upsert(fina..

Android Room은 어떻게 Flow를 지원할 수 있었을까?

Room의 room-ktx 종속항목을 추가하면 Kotlin Extension과 Coroutine 지원을 받을 수 있게 된다. 이는 가져다쓰는 개발자 입장에서도 굉장히 편리해지는데, 그중에서도 Flow의 지원은 DB내의 데이터가 바뀔때마다 쿼리를 실행해서 결과값을 방출 할 수 있도록 해준다.implementation "androidx.room:room-ktx:$room_version" 데이터의 변화가 일어났을때 이를 감지해서 새로운 Flow를 방출하는 구조를 짜고싶었는데, 문득 Room이 생각나서 내부 구현을 찾아보게 되었다.@JvmStatic public fun createFlow( db: RoomDatabase, inTransaction: Boolean, tableName..