Android 26

[AAC] ViewModel을 써야하는 이유?

이전 포스팅인 LiveData를 써야하는 이유?에서 ViewModel을 언급하였습니다. ViewModel 클래스는 생명 주기를 고려하여 UI관련 데이터를 저장하고 관리하도록 설계되었습니다. 이러한 ViewModel은 생명 주기를 인식하는 Data Holder 클래스인 LiveData와 함께 사용하고 있습니다. ✅ViewModel 개요 Android 프레임워크는 Activity와 Fragment와 같은 UI 컨트롤러의 생명 주기를 관리합니다. 프레임워크는 특정 사용자의 작업이나 완전히 통제할 수 없는 기기 이벤트에 대한 응답으로 UI컨트롤러를 제거하거나 다시 만들도록 결정할 수 있습니다. 만약, 시스템에서 UI컨트롤러를 제거하거나 다시 만드는 경우, 컨트롤러에 저장된 UI관련 일시적인 데이터가 모두 삭제됩..

Android/study_til 2021.07.06

[AAC] LiveData를 써야하는 이유?

시작하기 전) 얼마 전, IT직군 현직자들의 인터뷰를 접했다. 그 중, 눈에 띈 것은 모바일 직무에서 MVVM과 AAC를 활용한다는 점이었다. 기업에서 쓴다는 것은 그만큼 가치있는 기술이라 생각했고, 해당 기술들을 개인 프로젝트인 ⏰우산챙겨주는알림시계에 활용하기로 결심했다. 이때 당시, 날씨 탭 개발을 진행 중이였으나 과감하게 접었다. 해당 어플로 돈을 벌기보다 개발자로서의 경험과 역량 습득이 목적이었기 때문이다. ✅LiveData개요 LiveData는 Data의 변경을 관측할 수 있는 Data Holder 클래스입니다. 일반적인 Observable과는 다르게 LiveData는 생명주기(Life Cycle)를 알고 있습니다. 즉, Activity, Fragment, Service 등과 같은 컴포넌트의 생..

Android/study_til 2021.07.06

[AOS] Room + ViewModel + LiveData + RecyclerView (추가)

이번 포스팅에서는 지금까지 했던 예제에 DataBinding을 적용해보겠습니다. DataBinding이란, 간단하게 설명하자면 Layout의 UI 구성요소를 프로그래밍 방식(findViewById 등)이 아닌 선언적인 형태를 사용하는 것입니다. 즉, UI의 구성 요소 중 View에 데이터 소스를 Binding하는 작업을 DataBinding이라고 합니다. 이론 설명보다 직접 코드를 보며 어떤 차이가 있는지 확인하며 이해하도록 하겠습니다! 가장 먼저, build.gradle에 dependency를 추가합니다. android { buildFeatures { dataBinding true } } DataBinding의 XML 정의 기존 코드와는 달리 이라는 태그로 감싸며 각 View에 Binding시킬 Dat..

Android/study_til 2021.06.29

[AOS] Room + ViewModel + LiveData + RecyclerView (5)

이번 포스팅에서는 NoteAdapter에서 ListAdapter와 DiffUtil를 활용한 애니메이션을 추가합니다. notifyDataSetChanged();를 사용하면 전체 데이터 셋을 갱신합니다. 만약, List에서 데이터를 삭제할 경우, 딱딱한(?) UI를 보게 됩니다. 해당 부분을 좀 더 부드럽게 만드는 작업을 진행하도록 하겠습니다. 1. NoteAdapter 먼저, 전체 코드는 아래와 같습니다. NoteAdapter가 상속받는 클래스가 변경되었고, 이에 따라 오버라이딩된 메서드와 생성자가 추가되었습니다. 반면에, NoteList와 2개의 메서드가 삭제되었습니다. 추가된 코드들을 파트별로 확인하도록 하겠습니다. package com.heon9u.aacproject; import android.vi..

Android/study_til 2021.06.28

[AOS] Room + ViewModel + LiveData + RecyclerView (4)

해당 포스팅에서는 기존 Note를 클릭하여 편집하는 기능과 Swipe를 통해 삭제하는 기능을 구현합니다. Note를 클릭하여 Activity로 전환되는 이벤트 처리와 함께, Note를 추가하는데 활용한 AddNoteActivity를 재활용할 예정입니다. AddNoteActivity에 Edit 기능을 추가함으로써 AddEditNoteActivity로 업데이트하고, 각 작업을 REQUEST_CODE를 통해 분기하여 처리합니다. 1. NoteAdapter 기존 코드와 비교하여 추가된 코드를 작성했습니다. getNoteAt을 통해 position에 따라 수정할 Note 객체를 반환하며, NoteHolder에서는 ClickListener를 구현합니다. package com.heon9u.aacproject; imp..

Android/study_til 2021.06.28

[AOS] Room + ViewModel + LiveData + RecyclerView (3)

이번 포스팅에서는 Note를 추가하는 AddNoteActivity를 구현합니다. layout을 제작하기 전, 미리 add, save, close를 나타내는 icon을 제작하도록 하겠습니다. 1. res/drawable drawble 폴더를 마우스 우클릭하여 New -> Vector Asset을 클릭합니다. 그럼 아래 창이 나오며 Clip Art에서 원하는 icon을 선택 후, Name과 Color를 지정하면 icon을 만들 수 있습니다. 이렇게 생성한 icon을 Activity의 Top Menu에서 활용합니다. 먼저, res 폴더의 하위폴더로 menu를 생성합니다. 역시, res폴더를 마우스 우클릭하여 New -> Android Resource Directory를 클릭합니다. 그럼 아래 창에서 Resou..

Android/study_til 2021.06.28

[AOS] Room + ViewModel + LiveData + RecyclerView (2)

이번 포스팅에서는 간단한 layout구성을 시작으로 RecyclerView 제작을 위한 Adapter와 Note_item을 구현합니다. RecyclerView에 관한 설명은 이전 포스팅인 RecyclerView의 원리와 사용법을 참고하시기 바랍니다. 1. activity_main 메인 페이지는 다른 View를 제외하고 RecyclerView만 구현합니다. 각 데이터들을 스크롤이 가능한 리스트 형태로 나타내며, 간단한 애니메이션 기능을 추가할 예정입니다. 2. note_item RecyclerView에서 데이터들을 나타내기 위한 View역할을 합니다. 즉, 데이터를 담는 형태라고 생각할 수 있습니다. 3. NoteAdapter Adapter란 화면에 보여질 Note List를 RecyclerView에 바인..

Android/study_til 2021.06.28

[AOS] Room + ViewModel + LiveData + RecyclerView (1)

이번 포스팅부터는 구글에서 권장하는 Room과 MVVM을 활용하도록 하겠습니다. 위 이미지는 실제 구글에서 권장하는 Android MVVM 패턴의 데이터 통신 모델입니다. 최근 개인 프로젝트로 앱을 개발하고 유지보수하는 과정에서 몇가지 불편함을 겪었습니다. SQLite 기반에서는 테이블의 컬럼 하나를 변경하는데만 3~4개의 수정 사항이 필요. AddEditActivity의 복잡한 코드, MVVM을 안쓰니 직접 처리해야할 로직들이 많음. (ex: List 갱신) 구글에서 비동기처리로 권장하는 RxJava가 MVVM과 호환가능. (AsyncTask는 Android 11부터 Deprecated로 지정) 이러한 상황들을 해결하기 위해 Room과 MVVM을 사용하기로 결심했습니다. 먼저, 예제 하나를 따라해보고 ..

Android/study_til 2021.06.28

[AOS] ROOM이란?

Android에서 ROOM이란 무엇일까? ROOM은 데이터베이스의 데이터를 Java 또는 Kotlin 객체로 매핑해주는 ORM 라이브러리입니다. ORM(Object Relational Mapping)이란? 객체 지향 프로그래밍은 Class를 사용하고, 관계형 데이터베이스는 Table을 사용한다. 객체 모델과 관계형 모델 간에 불일치가 존재한다. ORM은 객체간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결한다. ROOM은 SQLite에 대한 추상 레이어를 제공하여 SQLite의 모든 기능을 제공하면서 편리한 데이터베이스의 접근을 허용합니다. Google은 SQLite대신 ROOM을 사용하도록 권고하고 있습니다. SQLite vs ROOM SQLite는 쿼리에 대한 에러를 컴파일 타임에 확인할..

Android/study_til 2021.06.24

[AOS] RecyclerView의 원리와 사용법

RecyclerView란? 대량의 데이터set을 효율적으로 표시할 수 있는 View입니다. 예를 들어 카카오톡의 채팅 대화방처럼 특정 객체들을 리스트 형태로 나열하는데 RecyclerView를 활용할 수 있습니다. 기본적으로 제공되는 ListView가 있지만, RecyclerView는 커스터마이징과 효율성 측면에서 장점이 더 많은 View라고 볼 수 있습니다. RecyclerView의 재활용성 위의 그림을 보면, ListView와 다르게 RecylcerView는 아래로 스크롤 할 때, 맨 위의 객체를 맨 아래로 이동시켜 재활용하는 것을 확인할 수 있습니다. 물론, 객체 자체만을 재활용하는 것으로 객체에 담겨지는 데이터는 새로 갱신하여 사용합니다. 만약 맨 처음 화면에 보여질 View가 10개라면? 실제 ..

Android/study_til 2021.06.09