[Android] AAC 가 무엇인가?

[Android] AAC 가 무엇인가?

Google에서 2017년도에 AAC라는 새로운 라이브러리를 발표했고 이후

2018년도에 AAC가 Jetpack의 구성 요소중 하나로 들어가있다고 발표하였다.

그래서 오늘은 Jatpack과 AAC의 관계와 정의에대해 공부해볼 것이다.

1) Jetpack 과 AAC의 관계

Architecture 부분이 AAC라고 볼 수 있다.
New로 붙어있는 것들이 Jetpack에서 추가된 AAC이고, 그렇지 않은 부분이 2017년도 Google I/O에서 발표된 AAC라고 생각하면 된다.

출처: https://heegs.tistory.com/119 [Heeg’s Log:티스토리]

Heeg님의 블로그를 참고해 AAC와 Jatpack의 관계를 명확히 정의 할 수 있었다.

즉 Jatpack의 Architecture가 AAC 이고, 위와 같이 8가지가 있다는 것을 알 수 있다.

2) AAC란?

AAC는 Android Architecture Components의 약자로, 테스트와 유지보수가 쉬운 앱을 디자인할 수 있도록 돕는 라이브러리의 모음이다.

LiveData(Lifecycle aware observable)

LiveData는 Observable 형태로 사용하며, 안드로이드 Lifecycle에 따라 데이터를 관리한다.

  • 즉 데이터를 관찰하고 있다가, 기본 데이터가 변경될때 Observer객체에 알린다.
  • 그럼 Observer객체가 UI를 최신화 하고 UI와 Data상태가 일치하게 최신화 해준다.
  • 기기 회전(가로,세로 Rotation)이 일어나도 최신데이터를 처리할 수 있도록해준다.(AAC-ViewModel과 함께 사용시)
  • 메모리 누수 없는 사용을 보장한다.
  • Lifecycle에 따라 LiveData의 이벤트를 제어한다.

ViewModel

AAC에서 말하는 ViewModelMVVM디자인패턴의 ViewModel과 이름만 같지 전혀 다르다!

💡 MVVM의 ViewModel
  • MVP 패턴에서 파생된 패턴으로, 비즈니스 로직과 프레젠테이션 로직을 UI로부터 분리하는 것을 목표로 한다.
  • View와 Model사이의 의존성을 없애 테스트, 유지보수, 재사용성을 높인다.
  • 즉, 뷰와 모델 사이의 데이터를 관리하고 Binding 해준다.
    • 일반적으로 LiveData또는 DataBinding을 통해 Activity나 Fragment 감지할 정보를 노출한다.
  • 1:N 관계이기 때문에 하나의 액티비티에 여러 개의 ViewModel을 사용할 수 있다.
💡 AAC의 ViewModel
  • LifeCycle를 고려하여 UI 관련 데이터를 저장하고 관리한다.
  • 화면 회전과 같이 구성을 변경할 때도 데이터를 유지할 수 있다.
    • 화면 회전이 발생했을 때 액티비티가 종료되고 다시 생성되는 과정을 거치는데, 이때 생명 주기를 관리하여 데이터를 유실하지 않고 그대로 보존해두고 사용할 수 있게 해 준다.
  • 싱글톤으로 하나만 존재한다.
    • 여러 번 뷰 모델을 생성하여 사용한다고 해도, 싱글톤이기 때문에 최초에 생성한 하나의 객체만 사용하게 된다.

하지만, 구글에서 권장하는 ViewModel은 하나의 액티비티에 하나의 ViewModel을 사용하고,

LiveData와 여러개의 Model을 사용하여 구현하는 것을 권장하고 있으니, 개발자가 판단하여 프로젝트에 알맞게 ViewModel을 선언해서 사용하면 된다!


Room(object Mapping for SQLite)

image

  • Google에서 제공하는 ORM(Object-realtional mapping)으로 SQLite 개체매 라이브러리이다.
  • Room을 사용해 SQLite테이블 데이터를 JAVA나 Kotlin객체로 쉽게 매핑할 수 있다.
💡 Room의 구성요소
  • 데이터베이스 : 앱에 저장되어 있는 로컬 데이터에 대 엑세스 포인트를 제공해주는 역할
  • DAO(Data Access Object) : 앱에서 데이터베이스의 데이터를 추가,삭제,업데이트 작업을 할 수 있는 메소드를 제공해준다.
    • 그외에도 다양한 쿼리 사용이 가능하다.
  • Entitiy : 데이터베이스 내에 존재하는 테이블을 가리킨다.

© 2023. All rights reserved.

AgileCatch