Model에서 Repository Pattern을 사용하게 되면, ViewModel은 Repository를 통해 데이터를 요청하게 되고, Repository는 데이터 소스로부터 데이터를 가져와 ViewModel에 제공하기 때문에 ViewModel은 데이터의 출처나 데이터를 가져오는 방식에 대해 알 필요가 없어지고 Repository하고만 소통할 수 있게 된다.
//api나 데이터베이스같은 외부 소스가 아닌 메모리에 사용자 정보를 저장,관리
interface UserRepository {
fun getUserById(idx: Int): User?
fun getAllUsers(): List<User>
fun addUser(user: User)
fun updateUser(user: User)
fun deleteUser(idx: Int)
}
class InMemoryUserRepository : UserRepository {
private val users = mutableListOf<User>()
override fun getUserById(idx: Int): User? {
return users.find { it.idx == idx }
}
override fun getAllUsers(): List<User> {
return users.toList()
}
override fun addUser(user: User) {
users.add(user)
}
override fun updateUser(user: User) {
val index = users.indexOfFirst { it.idx == user.idx }
if (index != -1) {
users[index] = user
}
}
override fun deleteUser(idx: Int) {
users.removeAll { it.idx == idx }
}
}
//사용자 정보 CRUD
fun main() {
val userRepository: UserRepository = DoUserRepository()
// 사용자 추가
userRepository.addUser(User(1, "고진호1", 28))
userRepository.addUser(User(2, "고진호2", 26))
// 사용자 조회
val user1 = userRepository.getUserById(1)
val user2 = userRepository.getUserById(1)
Log.d("User1",user1!!.name)
Log.d("User2",user2!!.name)
Log.d("User2", user2.age.toString())
// 모든 사용자 조회
val allUsers = userRepository.getAllUsers()
// 사용자 정보 업데이트
userRepository.updateUser(User(2, "고진호", 26))
Log.d("User2",user2!!.age.toString())
// 사용자 삭제
userRepository.deleteUser(2)
}
data class User(val idx: Int, val name: String, val age: Int)
즐겁게 읽었습니다. 유용한 정보 감사합니다.