KOTLIN · 디자인패턴
MVVM 패턴
Model-View-ViewModel 패턴을 Kotlin으로 구현합니다. StateFlow로 상태를 관리하고 UI와 분리합니다.
디자인패턴고급mvvmstateflowviewmodelarchitecture
핵심 설명
Model-View-ViewModel 패턴을 Kotlin으로 구현합니다. StateFlow로 상태를 관리하고 UI와 분리합니다.
Kotlin code
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
// Model
data class Todo(val id: Int, val text: String, val done: Boolean = false)
// ViewModel
class TodoViewModel {
private val _todos = MutableStateFlow<List<Todo>>(emptyList())
val todos: StateFlow<List<Todo>> = _todos.asStateFlow()
private var nextId = 1
fun addTodo(text: String) {
_todos.value += Todo(nextId++, text)
}
fun toggleTodo(id: Int) {
_todos.value = _todos.value.map {
if (it.id == id) it.copy(done = !it.done) else it
}
}
fun removeDone() {
_todos.value = _todos.value.filter { !it.done }
}
val stats: Flow<String> = _todos.map { list ->
val done = list.count { it.done }
"완료: $done / 전체: ${list.size}"
}
}
// View (콘솔 시뮬레이션)
fun main() = runBlocking {
val vm = TodoViewModel()
val job = launch { vm.todos.collect { println("목록: $it") } }
vm.addTodo("Kotlin 공부")
vm.addTodo("프로젝트 완성")
delay(50)
vm.toggleTodo(1)
delay(50)
vm.removeDone()
delay(50)
job.cancel()
}학습 팁
ViewModel은 Android의 ViewModel 클래스를 상속하면 구성 변경(화면 회전)에도 상태가 유지됩니다.
주의할 점
ViewModel에서 View를 직접 참조하면 메모리 누수가 발생합니다. 반드시 StateFlow/SharedFlow를 통해 간접 통신하세요.
자주 묻는 질문
MVVM 패턴란 무엇인가요?
Model-View-ViewModel 패턴을 Kotlin으로 구현합니다. StateFlow로 상태를 관리하고 UI와 분리합니다.
MVVM 패턴 학습 시 주의할 점은 무엇인가요?
ViewModel에서 View를 직접 참조하면 메모리 누수가 발생합니다. 반드시 StateFlow/SharedFlow를 통해 간접 통신하세요.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.