본문 바로가기

Android

(11)
[Android Jetpack] 앱 속 DB, Room 우리는 네트워크 연결이 없을 때에도 데이터를 불러온 경험이 있을 것이다. (카카오톡 채팅 화면) 이 때는 서버에서 데이터를 불러오는 것이 아니라 로컬 DB에 저장해두고 불러오는 경우다. 상당한 양의 구조화된 데이터를 처리하는 앱은 데이터를 로컬에 유지하여 매우 큰 이익을 얻을 수 있다. 가장 일반적인 사용 사례는 기기가 네트워크에 액세스할 수 없을 때도 사용자가 오프라인 상태로 계속 콘텐츠를 탐색할 수 있도록 관련 데이터를 캐시하는 것이다. 원래는 SQLite를 활용해 어플리케이션 내부 저장소를 만들어 저장했었다. 그러나 SQLite를 사용할 때에는 다음과 같은 불편함이 있었다. Query의 유효성 검사 기능을 제공하지 못했던 점 Scheme가 바뀔 떄 자동적으로 업데이트를 하지 못했던 점 ORM 지원이..
[Android] View Binding 필자는 예전에 데이터 바인딩과 뷰바인딩을 혼동한 적이 있었다. 그래서 이번 포스팅은 뷰바인딩에 대해 공부하고자 한다. View Binding View Binding은 뷰와 상호작용하는 코드를 쉽게 작성할 수 있도록 만들어 주는 기능이다. 모듈에서 View Binding을 사용하도록 설정하면 모듈에 있는 XML 레이아웃 파일들의 바인딩 클래스가 생성된다. 이 바인딩 클래스의 인스턴스에는 해당 레이아웃에서 ID를 가지고 있는 모든 뷰와 루트 뷰의 직접 참조가 포함되어 있다. 그래서 대부분의 경우 View Binding은 findViewById를 대체할 수 있다. 모듈에서 View Binding 사용 설정 View Binding은 모듈 단위로 사용 설정되며, build.gradle 파일에 View Bindin..
[Android] AAC (Android Architecture Components) AAC 란? AAC는 Android Architecture Components의 약자로, 테스트와 유지보수가 쉬운 앱을 디자인할 수 있도록 돕는 라이브러리의 모음이다. 쉽게 말해서 라이브러리 모음이라고 할 수 있다. Google I/O 2017에서 새로운 라이브러리를 AAC로 묶어서 발표를 하여 AAC라는 것이 사용되게 되었고, Google I/O 2018에서 Android Jetpack을 발표할 때는 Jetpack의 구성요소 중 하나로 AAC가 들어가 있다. 안드로이드 아키텍처 (AAC) 원칙 관심사 분리 코드를 작성할 때 Activity 혹은 Fragment와 같은 UI 기반의 클래스는 UI 및 OS 상호작용을 처리하는 로직만 포함해야 한다. 이는 UI 클래스를 최대한 가볍게 유지하여 Lifecycl..
[Android] DataBinding 안드로이드 공부를 하면서 databinding을 많이 사용해왔으나 databinding을 지양하는 것이 좋다는 말을 주변에서 듣고 무심코 써왔던 databinding에 대해 내가 자세히 알고 있지 못하다고 생각하게 되어 이 글을 쓰게 되었다. DataBinding이란 Data Binding은 안드로이드 아키텍처 구성요소 중 하나로 UI 구성요소와 앱의 데이터 소스를 선언적으로 연결할 수 있게 하는 라이브러리이다. DataBinding 장점 레이아웃 파일에서 UI 구성요소를 앱 데이터와 연결하면 액티비티에서 UI 프레임워크의 호출을 줄일 수 있어서 코드가 간결해지고 유지관리가 쉬워진다는 장점이 있다. 또한 앱 성능이 향상되며, 메모리 누수 및 Null Pointer 예외를 방지할 수 있다. 1. 가독성 향..
[Android] Multi-ViewType RecyclerView 이전 포스트에서 RecyclerView에 대해 알아보았다. 이전 포스트 내용에서는 한가지 틀을 재활용하여 연속적으로 사용하는 뷰를 구성해보았다. 그렇다면 여러가지 틀을 연속적으로 사용하는 뷰를 만들고자 한다면 어떻게 해야할까? 그럴 때 사용하는 것이 ConcatAdapter와 Multi-ViewType RecyclerView이다. 그렇다면 ConcatAdapter와 Multi-ViewType RecycleView의 차이점은 무엇일까? ConcatAdapter은 역할에 확정을 지어주어야 한다. (헤더, 바디 등등) 반면 Multi-ViewType RecycleView는 보다 유연하게 사용 가능하다. 그러나 ConcatAdapter가 구현이 훨씬 용이해서 상황에 따라 선택해서 구현하는 것을 좋다. 이번 포스..
[Android] RecyclerView 안드로이드 프로젝트를 몇 번 진행해보면서 리사이클러뷰가 정말 많이 사용되는 것을 느꼈다. 그래서 리사이클러뷰에 대해 정리하는 시간을 가져보고자 한다. RecyclerView는 Adapter를 활용하는 컴포넌트이다. Adapter Pattern에 대해 잠깐 알아보자면 디자인 패턴의 일종으로 한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환하는 패턴이다. 이 패턴을 사용하면 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 작동할 수 있다. 즉, 어댑터 패턴은 호환성이 없는 두 개의 인터페이스 사이에서 중간 역할을 수행하여 서로 호환성을 유지하면서 작업을 처리할 수 있게 한다. 즉 AdapterPatten을 이용함으로써 클라이언트와 구현된 인터페이스를 분리시킬..
[Android] Fragment 생명주기 1. Fragment 란 Fragment는 동작 또는 Activity내에서 UI의 일부를 나타낸다. 여러 개의 프래그먼트를 하나의 액티비티에 조합해 창이 여러 개인 UI를 구축할 수 있으며, 하나의 프래그먼트를 여러 액티비티에서 재사용할 수 있다. 프래그먼트는 자체 수명 주기를 가지고, 자체 입력 이벤트를 받으며, 액티비티 실행 중에 추가 및 제거가 가능한 액티비티의 모듈 섹션이라고 생각하면 된다. 프래그먼트는 항상 액티비티 내에 포함되어 있어야 하며 해당 프래그먼트의 수명주기는 호스트 액티비티의 수명주기에 직접적으로 영향을 받는다. 이러한 프래그먼트는 분할된 화면들을 독립적으로 구성하기 위해 사용하고, 분할된 화면들의 상태를 관리하기 위해 사용한다. 2. Fragment's Lifecycle & Fra..
[Android] Activity 생명주기와 상태 1. 액티비티 생명주기 (Lifecycle) 액티비티가 있을 수 있는 모든 상태와 각 상태에서 다음 상태로 전환하는 것과 관련된 콜백의 방향이 있는 그래프 ( 액티비티가 생성될 때부터 종료될 때까지의 일련의 상태 ) 액티비티 상태 및 앱 공개 설정 상태 변경은 사용자 동작, 장치 회전과 같은 구성 변경 또는 시스템 동작에 의해 시작됨 - Created (아직 보이지 않음) : 생성 - Started (보임) : Activity가 시작은 되었으나 터치는 먹히지 않음 - Resume (보임) : User Interface를 받게 됨 (입력을 받게 됨) - Paused (부분적으로 보이지 않음) : 특정 액션을 통해서 액티비티 전환 시점에 호출 - Stopped (숨김) : 완전히 멈춤 (다음 액티비티가 수행..