본문 바로가기

안드로이드/JetPack

(13)
[안드로이드] 5. ViewModel을 이용하여 UI와 로직을 분리 ViewModel UI와 로직을 분리하기 위한 라이브러리이다. 이렇게 구현하면 앱의 구조가 더욱 향상된다. 또한 안드로이드에서 화면을 회전할 경우 액티비티 모두 초기화되고 파괴된다(데이터가 사라짐). 이러한 것을 방지하기 위해 사용하기도 한다. 이는 ViewModel의 수명은 액티비티가 완전히 파괴되기 전까지 메모리에 남아있기 때문에 가능하다. ViewModel을 위한 구성 추가 build.gradle(:app) android { ... kotlinOptions { jvmTarget ="1.8" } } dependencies{ ... implementation 'androidx.activity:activity-ktx:1.1.0' ... } 그리고 데이터와 관련된 작업을 ViewModel로 이전시킨다. M..
[안드로이드] 4. Room 비동기처리 (feat. Coroutine) 지난번 문서까지의 리뷰 Room을 이용하여 할일 목록을 화면 상에 업데이트 중이었고, LiveData를 통해 테이블을 관찰하여 자동으로 화면이 갱신되었다. 그리고 2. Room에서 메인쓰레드에서 쿼리를 가능하게 했음을 기억할 것이다. 이는 임시방편이었고 사실상 DB 작업은 메인 쓰레드에서 쿼리를 허용하는 것은 앱의 성능을 저하한다. val db = Room.databaseBuilder( applicationContext,AppDatabase::class.java, "database-name" ).allowMainThreadQueries() //문제가 되는 부분 .build() 백그라운드에서 DB 작업을 하기 위한 방식 쓰레드를 사용한다. - Java & Kotlin AsyncTask를 사용한다. - Ja..
[안드로이드] 3. LiveData LiveData 데이터의 변화를 관찰하여 화면을 갱신시키기 위한 라이브러리이다. 이해를 위해 이전 문서의 코드를 보자. result_textView.text = db.todoDao().getAll().toString() add_button.setOnClickListener { db.todoDao().insert(Todo(todo_edit.text.toString())) result_textView.text = db.todoDao().getAll().toString() } 값을 받아 UI에 업데이트하는 똑같은 구문이 두개나 존재한다. 값이 변경될 때 마다 화면 갱신을 위해 저러한 구문을 반복해서 써줘야 되는 것도 문제지만, 만약 한번이라도 까먹고 빠뜨린다면 잘못된 결과를 유저에게 보이게 된다. 위처럼 Li..
[안드로이드] 2. Room 기본 가이드 Room Room은 안드로이드 내부 데이터베이스 라이브러리 중 하나 SQLite를 대체할 라이브러리이다. 이번 문서에서는 코틀린을 이용하여 Room을 활용하는 간단한 예제를 살펴본다. 기본 구성 Room을 사용하기 위해선 몇 가지 그래들 세팅이 필요하다. 먼저, build.gradle(:app)에서 다음과 같이 설정한다. ... apply plugin: 'kotlin-kapt' ... dependencies { ... implementation 'androidx.room:room-runtime:2.1.0' kapt 'androidx.room:room-compiler:2.1.0' //kapt 대신 annotationProcessor를 사용하면 안된다. } 위 사진은 Room 아키텍쳐 구조이다. 기본적인 앱..
[안드로이드] 1. MVVM 개요 MVVM MVVM이란 Model, View, ViewModel로 표현하는 안드로이드 개발의 구현 패턴이다. 기존의 구현 방식의 경우 액티비티에 너무 많은 기능이 집중되어(종속성의 증가) 유지보수 및 테스트가 힘들어진다. 이러한 문제를 해결하기 위해 MVVM패턴을 주로 사용한다. MVC와 MVVM 기존의 MVC(Model-View-Controller)의 경우 액티비티가 컨트롤러의 역할을 맡고, xml 파일인 뷰와 연결되어 사용자와 상호작용을 하고, 그와 동시에 액티비티는 모델과도 연결되어 데이터 처리도 담당했다. 즉, 뷰와 모델 사이에서 이름 그대로 controller의 역할을 수행하였다. MVVM의 경우 뷰에서 뷰모델, 뷰모델에서 모델로 작업을 단방향으로 처리하며, 뷰에서 뷰모델을 관찰하여 데이터의 변경..