도리안의 2025년 개발기 #123 - 데이터가 업데이트 될 때마다 리스트가 필요한 경우와 처음 1번만 필요한 경우

데이터가 업데이트 될 때마다 리스트가 필요한 경우와 처음 1번만 필요한 경우

No. 123
2025. 07. 07 (월) | Written by @dorian-dev

오늘의 개발기

안드로이드 앱에서 Room 데이터베이스를 구현한다면, 데이터를 읽는 함수의 리턴 타입은 Flow<원하는 데이터의 타입>으로 지정할 수 있다. 이것의 장점은 해당 데이터가 바뀔 때마다 Flow를 통해 새로운 데이터를 가져올 수 있다는 것이다. 예를 들어, 아래와 같은 DAO 인터페이스를 정의했다면, 사용자의 정보가 추가/삭제/수정될 때마다 getAll() 함수 호출로 반환받은 Flow 객체를 통해 리스트를 새로 받을 수 있다.

@Dao
interface UserDao {
    @Query("SELECT * FROM user")
    fun getAll(): Flow<List<User>>
}

아래 flowUserList는 사용자 리스트를 구독하는 예이다.

userDao.getAll().collect { userList: List<User> ->
    // 사용자 관련 코드 작성
}

그런데 상황에 따라서는 데이터를 1번만 읽어야 하는 경우도 있다. 이 때에는 flow { ... } 함수를 활용하여 데이터를 1번만 로딩할 수 있다.아래 예에서 getAll().first()는 최근 사용자 리스트를 읽는다고 이해하면 된다.

val flowUserList = flow {
    emit(userDao.getAll().first())    // 최근 사용자 리스트를 1번만 방출
}

지금은 조금 익숙해졌지만, Room을 통해 데이터를 1번만 읽어야 하는 경우를 어떻게 처리해야 할지가 어리둥절했었다. 나중에 또 헤매지 않기 위해 포스트에 적어 둔다.

추가로...

위에 작성한 코드는 머리 속에 기억된 것을 개략적으로 적은 것이다. 나중에 실제로 돌아가는 코드를 다시 적을 예정이다.


지난 2025년 개발기


Layout provided by Steemit Enhancer hommage by ayogom


Posted through the ECblog app (https://blog.etain.club)
Sort:  

안녕하세요.
SteemitKorea팀에서 제공하는 'steemit-enhancer'를 사용해 주셔서 감사합니다. 개선 사항이 있으면 언제나 저에게 연락을 주시면 되고, 관심이 있으신 분들은 https://cafe.naver.com/steemitkorea/425 에서 받아보실 수 있습니다. 사용시 @응원해 가 포함이 되며, 악용시에는 모든 서비스에서 제외될 수 있음을 알려드립니다.


안녕하세요.
이 글은 SteemitKorea팀(@ayogom)님께서 저자이신 @dorian-dev님을 응원하는 글입니다.
소정의 보팅을 해드렸습니다 ^^ 항상 좋은글 부탁드립니다
SteemitKorea팀에서는 보다 즐거운 steemit 생활을 위해 노력하고 있습니다.
이 글은 다음날 다시 한번 포스팅을 통해 소개 될 예정입니다. 감사합니다!

Upvoted! Thank you for supporting witness @jswit.