모던 안드로이드 - 코틀린과 JetPack 활용 #12 - [Kotlin] LiveData
시작하기 전에...
#11는 #12와 내용이 같은데, 언어는 자바입니다. 자바 관련 강의 내용은 후순위로 정리 예정입니다.
유료 강의 URL
LiveData<T>
- 데이터의 변화를 관찰하고 이를 처리할 수 있다.
- T: 관찰할 데이터의 타입
- LiveData 클래스의 observe(owner, observer) 메소드를 호출하여 데이터 관찰 요청
- owner: observe 요청자이며, LifecycleOwner 인터페이스를 구현한 객체여야 함
- observer: 데이터의 변화 처리 객체
observe 메소드 호출 예 - 점수 관찰
60점 이상이면 합격 플래그 on, 미만이면 이를 off한다.
var isPass = false
val liveScore = LiveData<Int>(0)
liveData.observe(owner) { observedScore ->
isPass = if (observedScore >= 60) {
true
} else {
false
}
}
owner의 타입은 LifecycleOwner 인터페이스이며, AppCompatActivity 클래스는 이를 구현하고 있습니다. 따라서 AppCompatActivity를 상속받는 클래스 안에서는 owner 파라메터에 this를 대입해도 됩니다.
Room DB와 LiveData
- SELECT 문 실행하는 메소드의 리턴 타입을 LiveData<T>로 지정 가능
- 이 라이브데이터를 observe 하면, insert, update, delete 실행될 때마다 observer가 실행됨
- 장점: DB 데이터 바뀔 때마다 특정 작업 처리 가능 (예: UI 업데이트)
예 - DAO 클래스
@Dao
interface TodoDao {
@Query("SELECT * FROM Todo")
fun getAll(): LiveData<List<Todo>>
@Insert
fun insert(todo: Todo)
@Update
fun update(todo: Todo)
@Delete
fun delete(todo: Todo)
}
예 - DAO 객체로부터 Todo 리스트 관찰
val db = Room.databaseBuilder(applicationContext, AppDatabase::class.java, "todo-db").apply {
allowMainThreadQueries()
}.build()
// Todo 리스트 내용을 텍스트로 보여주며, Todo 테이블의 내용이 바뀔 때마다 업데이트.
db.todoDao().getAll().observe(activity) { todoList ->
textView.text = todoList.toString()
}
[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.