Android [ Java, Kotlin ]

안드로이드 AAC(Android Architecture Components) 란?

Moonsu99 2023. 11. 17. 19:25

 

AAC?

Android Architecture Components는 안드로이드 애플리케이션 개발을 위한 라이브러리 모음으로, 구글에서 발표했다.

앱의 설계를 더 효율적이고 관리하기 쉽게 만들어주는 목적을 가지고 있다. 

 

주요 구성 요소

  • LiveData
  • ViewModel
  • Room
  • Navigation
  • WorkManager
  • Lifecycle
  • Paging
  • DataBinding

 

LiveData

데이터 변경을 관찰할 수 있는 Data Holder Class.

UI Components가 데이터 변경을 감지하고 이에 반응할 수 있도록 해주는 중요한 역할을 한다.

 

LiveData의 특징과 장점

1. 생명주기를 인식하여 활성 상태에 있는 Components에만 데이터 업데이트를 전송하기 때문에 앱이 백그라운드에 있을 때, 불필료한 데이터 업데이트를 방지할 수 있다.

2. Activity나 Fragment가 Destroy될 때, 자동으로 Observe연결을 해제하기 때문에 메모리 누수 방지에 도움이 된다.

3. LiveData를 사용하면 UI Components가 데이터의 최신상태를 반영하도록 쉽게 만들 수 있다.(UI와 데이터 상태의 일치 유지)

4. LiveData와 ViewModel이 같이 사용될 때, 백그라운드 작업의 결과를 UI에 반영하는 데 유용하다. ViewModel이 백그라운드 작업을 관리하고, 해당 결과를 LiveData를 통해 UI에 전달한다.

 

 

ViewModel

UI 관련 데이터를 저장하고 관리하는 Class.

데이터와 관련된 로직을 Controller와 분리하여 앱의 Architecture를 깨끗하고 관리하기 쉽게 만드는 것이 목적.

 

ViewModel의 특징과 장점

1. ViewModel은 Activity, Fragment의 LifeCycle과 연결되어 있지만, 이것들 보다 긴 LifeCycle 갖기 때문에 화면 회전 같은 구성 변경이 발생해도 데이터를 유지할 수 있다.

2. Controller(Activity, Fragment)의 참조를 직접 보유하지 않기 때문에 메모리 누수의 위험을 줄일 수 있다.

3. 백그라운드 작업(Network 호출, DB Query)의 결과를 저장하고 관리할 수 있다. 즉 성능 향상에 도움이 된다.

4. UI 로직과 분리되어 있어서 앱의 비즈니스 로직에 대한 테스트가 용이하다.

 

 

Room

SQLite DB를 위한 추상화 레이어를 제공하는 라이브러리.

 

Room의 특징과 장점

1. SQLite DB에 대한 편리한 접근을 제공하여 쿼리를 쉽게 작성하고, 결과를 Java or Kotlin 객체로 변환하는 기능을 제공한다.

2. DB테이블과 Java/Kotlin 객체간의 Mapping을 용이하게한다. Entitiy Class를 정의해서 DB테이블과 연동할 수 있다.(ORM)

3. LiveData와 통합을 지원해, DB의 데이터가 변경될 때 UI가 자동으로 업데이트되도록 할 수 있다.

4. Coroutine, RxJava 같은 비동기 프로그래밍 패러다임과 호환되기 때문에, 백그라운드 스레드에서 효율적으로 DB작업을 수행할 수 있다.

5. DB스키마 변경 시 필요한 마이그레이션 경로를 제공한다.

 

 

Navigation

애플리케이션 내에서 화면 간의 전환을 쉽고 효율적으로 관리할 수 있도록 설계된 도구.

 

Navigation의 특징과 장점

1. Navigation Components는 단일 활동(A Single Activity) 접근 방식을 사용하여, 앱 내 모든 Navigation 단일 활동 내에서 관리할 수 있도록 한다. 복잡한 인터페이스와 여러 활동 간의 네비게이션 로직을 단순화한다.

2. 앱 외부에서 특정 화면으로 바로 접근 할 수 있는 딥 링크를 쉽게 구현할 수 있다. 

3. 사용자의 앱 상태나 권한에 따라 다른 화면으로 Redirection하는 등의 조건부 네비게이션을 쉽게 구현할 수 있다.

 

 

WorkManager

백그라운드 작업을 예약하고 실행하는 데 사용되는 라이브러리.

 

WorkManager의 특징과 장점

1. WorkManager는 단발성(one-off)작업과 반복(recurring)작업을 모두 지원하기 때문에 다양한 시나리오에서 백그라운드 작업을 스케줄링 하는 데 유용하다.

2. Network 상태, 충전 상태, 저장공간 사용량 등 특정 조건을 만족할 때만 작업을 실행하도록 설정할 수 있다.

3. 애플리케이션의 생명주기와 독립적으로 작동하기 때문에 앱이 종료되거나 기기가 재시작 될 때도 계획되어있는 장업은 계속 실행된다.

 

 

Lifecycle

애플리케이션의 생명주기 이벤트를 관리하는 데 사용되는 Class들의 집합.

 

Lifecycle의 특징과 장점

1. Lifecycle components는 생명 주기의 변경을 인식하고 이에 반응하는 components를 만드는 데 도움을 준다.

2. 생명주기 인식 components를 사용하면 생명주기를 수동으로 관리할 필요가 없기 때문에 메모리 누수를 방지하는 데 도움이 된다.

3. 생명주기에 따른 작업을 자동으로 처리할 수 있다. 예를 들어 사용자가 화면을 떠날 때 자동으로 데이터 저장 등을 구현할 수 있다.

4. 생명주기 이벤트에 기반한 정확한 작업 수행으로 앱의 안정성과 신뢰성이 향상된다.

 

Paging

대용량의 데이터 세트를 효율적으로 로드하고 표시하는 데 사용.

데이터를 페이지 단위로 로드하여 사용자에게 부드러운 스크롤을 제공하며, 네트워크 사용 및 시스템 자원을 최적화 한다.

 

Paging의 특징과 장점

1. 한 번에 필요한 데이터만 로드한다. 앱이 시작될 때 모든 데이터를 로드하는 대신, 사용자가 스크롤 할 때 필요한 데이터만 요청함으로써, 메모리 사용과 네트워크 사용을 최적화한다.

2. 사용자가 앱 내에서 스크롤할 때, Paging 라이브러리는 미리 데이터를 로드하고 캐싱함으로써 부드러운 스크롤을 제공한다.

3. 로컬 DB, Network, 또는 두 가지를 혼합한 데이터 소스에서 데이터를 페이징할 수 있다.

4. LiveData, RxJava와 같은 반응형 프로그래밍 패러다임을 사용하여 데이터의 변경사항을 UI에 자동으로 반영할 수 있다.

 

 

DataBinding

UI Components와 데이터 소스를 직접적으로 연결하는 기능을 제공한다.

UI 코드를 간소화하고, 데이터와 UI간의 결합을 효율적으로 관리하는 데 있다.

 

DataBinding의 특징과 장점

1. DataBinding을 사용하면, 개발자는 XML Layout 파일에서 직접 데이터 모델을 참조할 수 있다. 이를 통해 UI Components와 데이터 모델을 직접 연결할 수 있다.

2. UI를 조작하기 위한 부가적 코드(findViewById() 등)의 필요성이 줄어든다. 따라서 코드를 더 깨끗히 관리 가능하다.

3. 양방향 바인딩을 지원하기 때문에 UI 변경사항이 데이터 모델에 자동으로 반영되고, 데이터 모델의 변경사항이 UI에 자동으로 반영된다.

4. Resource(문자열, 색상 등) 및 Events(클릭 등) 바인딩도 지원한다.