일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 추상팩토리패턴
- Singleton
- factory method
- 디자인패턴
- PrototypePattern
- a
- builderPattern
- 함수형프로그래밍
- Functional Programming
- Kotlin
- Abstract Factory
- El
- 디자인패턴 #
- Observer Pattern
- r
- 프로토타입 패턴
- 팩토리 메소드
- designPattern
- Design Pattern
- 옵저버 패턴
- 빌터패턴
- 싱글톤
- ㅓ
- ㅋㅁ
- 코틀린
- 추상 팩토리
- F
- Today
- Total
오늘도 더 나은 코드를 작성하였습니까?
Frozen Architecture - Kotlin SDK 본문
Realm SDK(java, swift)와 달리 Kotlin SDK는 기본 데이터와 동시에 업데이트되는 라이브 객체 및 컬렉션을 제공하지 않습니다.
대신 Kotlin SDK는 스레드 간에 안전하게 전달할 수 있는 frozen objects에서만 독점적으로 작동합니다.
Work with Frozen Objects
frozen objects는 Realam에서 데이터가 변경될 때, 자동으로 업데이트되지 않기 때문에 다른 Realm SDK에서 사용했을 수 있는 라이브 객체와 약간 다르게 작동합니다.
Access a Live Version of Frozen Object
객체를 modifiy하려면 live 상태여야 합니다.
mutableRealm.findLatest()를 사용하여 트랜잭션에서 frozen object를 live object로 변환할 수 있습니다.
live object는 write 또는 writeBlocking{ }내의 쓰기 트랜잭션 내에서만 액세스할 수 있습니다.
write{ } 클로저에서 반환된 객체는 쓰기 트랜잭션이 완료되면 frozen object가 됩니다.
*findLatest
- write{ } 은 항상 최신 버전의 데이터에서 작동합니다.
- frozen object의 최신 버전을 쉽게 찾고 write{ } 내에서 수정할 수 있(managed)는 복사본을 반환
lifecycleScope.launch {
DataBase.realm.write {
val person = this.findLatest(person!!)
person?.name = "haha"
}
Log.d(TAG, "onCreate()::person::${person}")
}
Thread-safe Realms
Realm 클래스는 더 이상 스레드의 제한을 받지 않는다
여러 스레드에서 realm 을 공유할 수 있습니d다.
더 이상 Realm.close()를 호출하여 명시적으로 Realm 수명 주기를 처리할 필요가 없습니다.
Access Changes
- Coroutines and the Flow API을 이용하여 객체를 변경.
- 변경된 사항은 스레드로부터 안전하므로 모든 컨텍스트에서 액세스할 수 있다.
- 알림은 전용 내부 알림 스레드에서 처리
- frozen object는 변경 리스너 지원.
val config = RealmConfiguration.Builder(schema = setOf(Task::class))
.build()
val realm = Realm.open(config)
// fetch objects from a realm as Flowables
CoroutineScope(Dispatchers.Main).launch {
val flow: Flow<ResultsChange<Task>> = realm.query<Task>().asFlow()
flow.collect { task ->
Log.v("Task: $task")
}
}
// write an object to the realm in a coroutine
CoroutineScope(Dispatchers.Main).launch {
realm.write {
copyToRealm(Task().apply { name = "my task"; status = "Open"})
}
}
Lazy Loading
- Realm 객체는 기본적으로 여전히 Lazy load 됩니다.
- 디스크에서 많은 양의 데이터를 읽지 않고도 많은 개체 컬렉션을 쿼리할 수 있습니다.
- 객체의 필드에 대한 첫 번째 액세스가 항상 가장 최근 데이터를 반환함을 의미합니다.
'kotlin Multiplatform > realm-kotlin-kmm' 카테고리의 다른 글
Realm Kotlin Create (0) | 2022.07.25 |
---|---|
Realm Transaction (0) | 2022.07.25 |
Realm kotlin scheme (0) | 2022.07.25 |
Realm kotlin schem(Data Type) (0) | 2022.07.25 |
Realm (Kotlin) (0) | 2022.07.22 |