[kotlin] 코틀린(Kotlin) Flow를 활용한 데이터베이스 조작

코루틴과 함께 사용되는 코틀린 플로우(Flow)는 비동기 데이터 스트림을 처리하는 데 효과적입니다. 특히, 데이터베이스와 상호작용하는 경우 데이터베이스 조작을 위한 효율적인 방법으로 널리 사용됩니다. 여기서는 코틀린 플로우를 사용하여 데이터베이스 조작을 어떻게 수행하는지에 대해 알아보겠습니다.

데이터베이스 연동

Room 라이브러리를 사용하여 안드로이드에서 SQLite 데이터베이스를 다루는 것을 가정합니다. Room은 코틀린 플로우와 함께 사용하기 쉬운 코틀린 커단츠(extensions)를 제공합니다.

@Dao
interface UserDao {
    @Query("SELECT * FROM users")
    fun getAllUsers(): Flow<List<User>>
    
    @Insert
    suspend fun insertUser(user: User)
}

위 코드는 Room 라이브러리를 활용하여 데이터베이스의 사용자(User) 테이블에 접근하기 위한 UserDao 인터페이스를 정의한 것입니다. getAllUsers 메서드는 코틀린 플로우를 반환하고, insertUser 메서드는 사스펜드(suspend) 함수로 정의되어 있습니다.

데이터베이스 조회

사용자 테이블의 데이터를 조회하는 예시를 살펴봅시다.

val userDao: UserDao // UserDao 인터페이스의 인스턴스
val allUsersFlow: Flow<List<User>> = userDao.getAllUsers()

viewModelScope.launch {
    allUsersFlow.collect { users ->
        // 조작된 사용자 목록 처리
    }
}

위 코드에서 viewModelScope는 뷰모델 스코프를 나타내며, collect 함수를 사용하여 플로우에서 방출되는 데이터를 수집하고 처리합니다.

데이터베이스 추가

데이터베이스에 새로운 사용자를 추가하는 예시를 살펴봅시다.

val newUser: User // 새로운 사용자 객체
userDao.insertUser(newUser)

위 코드에서 insertUser 메서드는 사스펜드로 정의되어 있기 때문에, 이 메서드를 호출하는 곳에서는 코루틴을 사용하여 호출해야 합니다.

이처럼 코틀린 플로우를 활용하여 데이터베이스 조작을 처리하면 비동기 작업을 간편하게 다룰 수 있습니다. 특히, UI와 데이터베이스 사이의 효율적인 통신을 위해 매우 유용합니다.

더 많은 정보를 원하시면 Kotlin FlowAndroid Room 공식 문서를 참고하세요.

참고 문헌: