이번 시간에는!
이번 시간에는 안드로이드 아키텍처 컴포넌트, AAC(Android Architecture Component) 에 대해 알아보려고 해요.
AAC 가 뭐야?
AAC(Android Architecture Component) 는 테스트와 유지보수가 쉬운 앱을 디자인할 수 있도록 돕는 라이브러리의 모음이에요. AAC에는 안드로이드와 아키텍처에 대한 고민이 많이 담겨있기 때문에, 필수로 공부해야 한다고 생각해요. 구글은 2017년에 새로운 라이브러리들을 AAC로 묶어 발표했으며 크게 5가지로 분류하였어요.
Lifecycles / LiveData / ViewModel / Room / Paging
이렇게 크게 다섯 가지로 분류되어 있어요.
이제 순서대로 알아보도록 하겠습니다.
Lifecycles
Lifecycles는 생명주기 모니터링을 돕는 라이브러리예요.
크게 두 가지로 이루어져 있는데,
Lifecycle Owner
Activity, Fragment에서 생명주기를 분리하여 Lifecycle 객체에 담는 역할을 해요.
Lifecycle 객체를 통해 다른 곳에서 해당 화면의 생명주기를 모니터링할 수 있는데, 자신의 생명주기를 담은 Lifecycle 객체를 → Lifecycle Owner라고 하죠.
Lifecycle Observer
Activity의 onCreate, onDestroy와 같은 생명 주기 메서드를 별도로 분리해 Activity 코드를 간결하게 유지할 수 있도록 해주어요.
background, foreground 상태 체크를 위해서 Application에 LifecycleObserver를 적용할 수 있어요.
LiveData
LiveData는 수영 주기를 인식하는 데이터 홀더 클래스예요.
Observable 형태로 사용하며 안드로이드 Lifecycle 에 따라 데이터를 관리하죠.
제가 정리한 장점들은 다음과 같아요.
- 메모리 누수가 없다
- 중지된 활동으로 인한 비정상 종료가 없다
- 수명 주기를 자동으로 알아서 처리한다
- ViewModel을 함께 활용하면 최신 데이터 유지가 편해진다
자세히 알고 싶다면 여기를 참고해주세요!
[Android/Kotlin] LiveData에 대해 알아보자!
[Android/Kotlin] LiveData에 대해 알아보자!
이전 게시물의 후속 편입니다. 이전 게시물이 궁금하시면 아래 링크를 통해 확인해주세요. [Android/Kotlin] ViewModelFactory를 사용하자! 저번 시간에 ViewModel에 대해 알아보았는데요, 이전 시간 게시글
minhyuuk.tistory.com
ViewModel
ViewModel은 UI 관련 데이터를 저장하고 관리해요.
또한 ViewModel 은 Activity 에선 Activity 가 완전히 종료될 때까지, 그리고 Fragment에서는 Fragment가 분리될 때까지 메모리에 남아있도록 설계되어 있으므로 ViewModel을 사용하면 화면 전환 또는 화면 회전과 같이 구성을 변경할 때도 데이터를 보존할 수 있죠.
자세히 알고 싶다면 여기를 참고해주세요!
[Android/Kotlin] 예제를 통해 ViewModel에 대해 알아보자!
[Android/Kotlin] 예제를 통해 ViewModel에 대해 알아보자!
ViewModel이란? ViewModel이란 Android Jepack의 구성요소 중 하나로, Activity와 Fragment 같은 UI Controller의 수명 주기를 관리합니다. 또한 본래 ViewModel이란 이름은 소프트웨어 개발 디자인 패턴 중 하나..
minhyuuk.tistory.com
Room
Room 라이브러리는 SQLite를 추상화한 라이브러리예요. 때문에 원활한 데이터베이스 액세스를 지원하는 동시에 SQLite를 완벽히 활용하죠.
Room은 스마트폰 내장 데이터베이스에 데이터를 저장하기 위해 사용하며 데이터베이스 데이터를 Java 또는 Kotlin 객체로 매핑해주고 데이터베이스를 구조적으로 분리하여 데이터 접근의 편의성을 높여주고 유지보수 하기 편리하죠.
SQLite에서는 되지 않던 기능들을 사용할 수 있고 사용감 측면에서도 더 쉽고 간편하게 사용할 수 있어 내부 DB를 좀 더 간편하게 구현할 수 있어요.
때문에 SQLite 보단 Room 사용을 권장하고 있죠.
Room의 구성요소
- 데이터베이스 → 데이터베이스를 보유하고 앱의 영구 데이터와의 기본 연결을 위한 기본 액세스 포인트 역할을 해요
- DAO (Data Access Object) → 데이터베이스의 데이터 CRUD 작업을 할 수 있는 메서드를 제공해요
- Entity → 데이터베이스 내에 존재하는 테이블이에요
5. Paging
Paging 라이브러리는 로컬 저장소나 네트워크를 통해 데이터를 나누어 효율적으로 로딩할 수 있게 도와주는 라이브러리예요.
여기서 말하는 Paging 은 데이터를 가져올 때 한 번에 모든 데이터를 가져오는 것이 아니라 일정한 덩어리로 나누어 가져오는 것을 뜻하며 Paging을 사용하면 성능, 메모리, 비용 측면에서 굉장히 효율적이죠.
예시
구글에서 사과를 검색하면 검색 결과를 2페이지씩 가져와요.
Paging의 장점
- 페이징 된 데이터에 대한 인-메모리 캐싱을 지원한다. 앱이 페이징 된 데이터로 작업하는 동안 시스템 리소스를 효율적으로 사용할 수 있다.
- 요청 중복 제거 기능이 기본으로 제공되어 앱에서 네트워크 대역폭과 시스템 리소스를 효율적으로 사용할 수 있다.
- 사용자가 로드된 데이터의 끝까지 스크롤할 때 구성 가능한 RecyclerView Adapter 가 자동으로 데이터를 요청한다.
- Kotlin 코 루틴 및 Flow를 우선적으로 지원하며, LiveData 및 RxJava를 지원한다.
- 새로고침 및 재시도 기능을 포함해 오류 처리를 기본으로 제공한다.
이 글을 마치며..
Android 앱은 크기가 커지기 때문에 앱을 확장하고 앱의 견고성을 높이며 앱을 더 쉽게 테스트할 수 있도록 아키텍처를 정의하는 것이 중요해요. 그래서 우리는 AAC 라이브러리를 공부하여 사용함으로써 테스트와 유지보수가 쉬운 앱을 만들어야 하죠.
오늘은 AAC 라이브러리들에 대해 간략하게 알아보았는데요, 좀 더 부족한 내용이 있으니 다른 분들의 블로그도 참고하며 Deep 하게 공부하면 좋을 것 같아요. 그리고 무작정 공부하는 것보단 이해하는 게 중요하다 생각해요. 이 글을 보고 이해가 되지 않는다면 다른 분들의 블로그를 꼭 참고하시면 좋을 것 같습니다.
'Android > CS' 카테고리의 다른 글
[Android/CS] 동기와 비동기, 블로킹과 논블로킹에 대해 알아보자! (0) | 2022.09.02 |
---|