상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - LiveData와 Room의 통합 방법은?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
LiveData와 Room의 통합은 Android 아키텍처 컴포넌트에서 데이터베이스를 효율적으로 관찰하고 UI에 실시간으로 반영하는 핵심적인 방법입니다. 이 둘을 통합하는 기본적인 개념과 절차를 자세히 설명해드리겠습니다. 1. 개념 이해 - Room 은 SQLite 데이터베이스를 추상화한 ORM 라이브러리로, <a href='https://sangseek.com/sangseeks/SQL 쿼리/ko'>SQL 쿼리</a>를 자바/코틀린 메서드로 변환해줍니다. - LiveData 는 데이터 변경을 관찰하여 UI에 자동으로 갱신되는 Lifecycle-aware 데이터 홀더입니다. Room에서 쿼리 결과를 단순 값으로 반환하면 데이터 변경 시 UI가 자동으로 갱신되지 않지만, 쿼리의 반환 타입을 `LiveData<T>`로 설정하면 데이터베이스에 변경이 생길 때마다 자동으로 LiveData 값이 갱신되고, 이를 구독하는 UI가 업데이트 됩니다. --- 2. 통합 절차 1) Entity 클래스 정의 Room에서 사용하는 데이터 클래스에 `@Entity` 어노테이션을 붙입니다. ```kotlin @Entity(tableName = "users") data class User( @PrimaryKey val id: Int, val name: String, val age: Int ) ``` 2) DAO 인터페이스에 LiveData 반환 타입 사용 Room의 DAO에 쿼리를 작성할 때 단순값이나 `List<T>` 대신, `LiveData<T>` 혹은 `LiveData<List<T>>`를 반환하도록 합니다. ```kotlin @Dao interface UserDao { @Query("SELECT * FROM users") fun getAllUsers(): LiveData<List<User>> } ``` 이렇게 정의하면, 이 쿼리의 결과가 데이터베이스에서 변경될 때마다 해당 `LiveData` 객체가 업데이트되고, 구독하고 있는 옵저버에게 변경된 값이 전달됩니다. 3) Room 데이터베이스 객체 생성 및 DAO 연결 Room 데이터베이스 클래스를 생성하고, DAO를 가져옵니다. ```kotlin @<a href='https://sangseek.com/sangseeks/Database/ko'>Database</a>(entities = [User::class], version = 1) abstract class AppDatabase : RoomDatabase() { abstract fun userDao(): UserDao } ``` ```kotlin val db = Room.databaseBuilder(context, AppDatabase::class.java, "app-db").build() val userDao = db.userDao() ``` 4) ViewModel에서 LiveData 받아서 UI에 제공 ViewModel 단에서 DAO로부터 LiveData를 받아서 UI에 노출합니다. ```kotlin class UserViewModel(application: Application) : AndroidViewModel(application) { private val userDao = AppDatabase.getDatabase(application).userDao() val allUsers: LiveData<List<User>> = userDao.getAllUsers() } ``` 5) Activity 또는 Fragment에서 LiveData 옵저빙 UI 컴포넌트에서는 ViewModel의 LiveData를 옵저빙하여 데이터가 변경될 때 UI를 자동 갱신합니다. ```kotlin viewModel.allUsers.observe(viewLifecycleOwner) { users -> // users 리스트를 UI에 반영하는 코드 (예: RecyclerView <a href='https://sangseek.com/sangseeks/어댑터/ko'>어댑터</a>에 전달) } ``` --- 3. 요약 - Room DAO 쿼리 메서드의 반환 타입을 `LiveData<T>`로 지정한다. - 이런 LiveData는 Room 내부에서 데이터 변경을 감지하여 자동으로 값이 갱신된다. - ViewModel에서 LiveData를 받아 UI 레이어에 전달한다. - UI에서는 LiveData를 옵저빙해서 데이터 변경 시 자동으로 UI가 업데이트 되도록 한다. 이러한 통합 덕분에 별도의 데이터 갱신 로직 없이도, 코드를 간결하고 안정적으로 유지할 수 있습니다. Lifecycle-aware이기 때문에 메모리 누수와 UI 비활성 상태일 때 업데이트를 방지할 수도 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기