Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- gradlew
- Bitrise
- 데이터베이스
- LazyRow
- LazyColumn
- 프로그래머스
- 백준
- 브론즈 1
- 브론즈1
- compose
- 2레벨
- DB 기능
- 성빈랜드
- 실버2
- 실버 4
- Android
- .github
- 데이터베이스 첫걸음
- 최댓값 최솟값
- 피보나치 수 2
- capitalize
- DB
- github action
- navigation component
- Activirty
- kotlin
- keystore
- Myungpyo Shim
- 개발하는 정대리
- suspend programming
Archives
- Today
- Total
plzy의 개발 블로그
[Android] MVVM 패턴이란 무엇인가 본문
MVVM 패턴이란 무엇인가? 😀
MVVM 이란 View, ViewModel, Model 이 결합된 형태로, 각각의 역할을 분리하여, 가독성과 재사용성을 높인 디자인 패턴이다.
기존의 패턴들은 어떠한 문제점이 있었길래 이러한 패턴이 등장이 했을까?
MVC와 MVVM의 차이점..
MVC 패턴 같은 경우에는 Controller에 너무 집중되어 코드가 무거워 진다는 단점이 있다.
이러한 단점은 유지보수 하기 힘들고, 코드를 보기 어렵다.
MVVM 패턴을 왜 공부해야 할까? 🙄
필자의 경험으로 View 안에 모든 소스코드를 넣었다.
그러다 보니 View에 코드가 집중되고, 다른사람이 보기 코드보기가 너무 어려웠다.
이러다 보니 디자이 패턴 의 필요성을 알게 되었고, 현재 Android 공식문서에 있는 MVVM 패턴의 필요성을 깨달았다.
AAC MVVM 패턴의 구성요소와, 기능들 😄
View
- 안드로이드의 UI 를 담당하는 프래그먼트, 액티비티를 의미한다.
- 화면에 그릴 것을 결정하고, 사용자와 상호작용 한다.
- 데이터 변화를 감지하는 옵저버를 가지고 있다.
- ViewModel
- UI를 그리는 데이터를 가지고 있으며, 변경되어도 괜찮다.
예제 소스
@InternalCoroutinesApi
class ToDoViewModel(application: Application) : AndroidViewModel(application) {
private val toDoDao = ToDoDatabase.getDatabase(
application
).toDoDao()
private val repository: ToDoRepository = ToDoRepository(toDoDao)
val getAllData: LiveData<List<ToDoData>> = repository.getAllData
fun insertData(toDoData: ToDoData) {
viewModelScope.launch(Dispatchers.IO) {
repository.insertData(toDoData)
}
}
fun updateData(toDoData: ToDoData) {
viewModelScope.launch(Dispatchers.IO) {
repository.updateData(toDoData)
}
}
fun deleteItem(toDoData: ToDoData) {
viewModelScope.launch(Dispatchers.IO) {
repository.deleteItem(toDoData)
}
}
fun deleteAll() {
viewModelScope.launch(Dispatchers.IO) {
repository.deleteAll()
}
}
}
이코드는 MVVM 패턴중 ViewModel 으로, 데이터의 변경사항을 담고 있다.
LiveData
- Observer 형식으로, 데이터 변경이 일어나면 감지가 가능하다.
- 최신 데이터로 변경할 수 있다.
Repository
- 뷰모델과 상호작용하기 위해 잘 정리된(Clean) 데이터 API를 들고 있는 클래스이다.
- 앱에 필요한 데이터, 즉 내장 데이터베이스나 외부 웹 서버 등에서 데이터를 가져온다.
- 따라서 뷰모델은 DB나 서버에 직접 접근하지 않고, 리포지토리에 접근하는 것으로 앱의 데이터를 관리한다.
Room
- Room 은 SQLlite 의 상위 버전으로, 더 직관이고 편리하게 DB를 사용할 수 있다.
MVVM 패턴의 장점은 무엇일까? 😀
- . View가 data를 실시간으로 관찰이 가능해, 데이터와 불일치 확률을 줄여준다. (LiveData)
- 뷰모델을 통해 데이터를 참조하기 때문에 액티비티/프래그먼트의 생명주기를 따르지 않는다.
- 화면전환과 같이 액티비티가 파괴된 후 재구성 되어도 뷰모델이 데이터를 홀드하고 있기 때문에 영향을 받지 않는다. 또한 뷰가 활성화되어있을 경우에만 작동하기 때문에 불필요한 메모리 사용을 줄일 수 있다.
- 기능별로 모듈화 되어있어, 역할 분리할수 있고 테스트 하기 쉽다.
MVVM 패턴의 단점은 무엇일까? 😖
- MVVM 패턴의 단점은 class를 많이 만들어야하고, 서로 코딩하여 연결 시켜주어야 한다. 이 과정이 복잡해지면 시간이 많이 든다.
마무리
MVVM 패턴을 공부하면서, 무척 편리하게 쓸 수 있다는걸 배웠다.
MVVM 패턴 뿐만아니라 여러 디자인 패턴을 추가로 배워 상황에 따라 유동적으로 쓸수 있도록 공부해야 한다.
'Android' 카테고리의 다른 글
[FIX] Android Studio 먹통일 때 (0) | 2022.01.06 |
---|---|
[Android] Activity life cycle 완벽 분석하기 (0) | 2021.06.29 |
[Android] Android (Singleton pattern) 이란 무엇인가 ? (2) | 2021.03.09 |
[Android] ViewPager2 어떻게 써야할까? (0) | 2021.02.21 |
[Android] Room 어떻게 써야할까 ? (0) | 2021.02.19 |