Programming/Android

[Android Roadmap] Part4: Design Patterns and Architecture (2/2)

코딩뽀시래기 2023. 2. 27. 18:50
728x90

📌 Part4: Design Patterns and Architecture

 

Design Patterns and Architecture: The Android Developer Roadmap - Part 4

In this post, you’ll learn about design patterns, architecture, and essential solutions for Android and how they have evolved over Android’s long history.

getstream.io


4️⃣ Network

- 자체 네트워크 솔루션을 구축하려면 connection pooling, 응답 캐싱, HTTP(Hypertext Transfer Protocol)과 같은 저수준 기능, 예를들어 인터셉터 및 비동기 호출 지원 등을 직접 구현해야하는 방대한 리소스가 요구됨.

- 7~8년 전 Android 개발자들은 HttpURLConnection 또는 Apache의 HttpClient를 사용하여 HTTP 요청을 수행했으나, 이러한 라이브러리에는 많은 보일러 플레이트 코드가 필요하고 연결 기능, 보안 지원 및 DNS(Domain Name System) 해결책들이 Android 플랫폼과의 호환성을 지원하지 않았음.

 

🔴 OkHttp

- 내부적으로 Okio로 빌드된 JVM 및 Android용 HTTP 클라이언트로 Android, Java 및 Kotlin 멀티플랫폼용 최신 I/O 라이브러리

- 효율적으로 동작하며 HTTP 클라이언트를 빠르게 셋업함.

-  자체 복구 시스템이 있어 연결성 문제와 같이 네트워크에 문제가 발생했을 때 수동으로 처리할 필요가 없음

- 최신 TLS(Transport Layer Security) 기능, Android용 보안 지원, 캐싱  인터셉터를 제공

- OkHttp에서 가장 유능한 기능 중 하나는 호출 로그를 기록, 모니터링, 수정, 재작성 및 재시도할 수 있는 강력한 메커니즘인 interceptors

 

- Bearer Authentication과 같은 액세스 토큰(access token)을 헤더에 추가하거나 요청 본문에 gzip 압축을 추가하는 등 필요에 따라 모든 네트워크 요청을 쉽게 변환가능

 

🟠 Retrofit

- OkHttp 위에 추상화 계층을 제공하므로 저수준 구현을 처리하지 않고도 쉽고 간결하게 요청 사양을 정의할 수 있음.

- Retrofit에서 제공하는 annotation을 활용하여 URL, 헤더 조작, method 및 body를 쉽게 요청할 수 있음

- 원하는 HTTP 요청 쉽게 빌드 가능

- Converter.Factory를 연결하면 보일러 플레이트 코드를 작성할 필요 없이 모든 JSON 응답을 쉽게 직렬화 가능

- 원시 응답을 처리하고 응답 유형을 원하는 유형으로 모델링할 수 있는 CallAdapter를 연결하여 네트워크 응답 조작 가능

 


 

5️⃣ Image Loading

 

🔴 Glide

- 타 이미지 로딩 라이브러리에 비해서 제공하는 기본적인 기능들이 압도적으로 다양

- Animated GIF 지원, placeholders, transformations, caching, 및 리소스 재사용과 같은 유용한 기능을 제공

 

🟠 Coil

- 100% Kotlin으로 작성되었으며 API들이 Kotlin 친화적

- Jetpack Compose를 지원

Transformations, animated GIF 지원, SVG 지원  비디오 프레임 지원과 같은 유용한 기능을 제공

 

🟡 Fresco

- 다른 라이브러리와 달리 Fresco는 특히 Android 버전 4.x 이하를 대상으로 메모리를 효율적으로 사용하는 데 중점

- 저수준 OS를 타깃하면서 메모리에 민감한 애플리케이션을 구축하지 않는 한 Glide 또는 Coil을 사용하시는 것을 권장

 

🟢 Landscapist

- Glide, Coil 및 Fresco로 네트워크 또는 로컬 이미지를 가져와서 표시하는 Jetpack Compose 이미지 로딩 라이브러리

- Jetpack Compose에서는 UI 렌더링 메커니즘이 기존의 XML 기반에 비해서 완전히 변경됨. 때문에 Landscapist는 널리 사용되는 이미지 로드 라이브러리를 사용하여 Jetpack Compose에서 이미지 로딩을 쉽고 효율적으로 할 수 있도록 개발

- 이미지 상태 추적, 사용자 지정 Composable 구성, circular reveal 및 crossfade와 같은 애니메이션을 지원

최신 버전에서 ImagePlugin이라는 새로운 개념이 도입되어 이미지 로딩 동작을 더 쉽고 효율적으로 구현 가능

 


 

6️⃣ Local Storage

 

🔴 Room

- 복잡한 SQL 문 없이 데이터베이스 쿼리 및 액세스를 단순화 할 수 있도록 SQLite를 사용하여 추상화 계층을 제공하는 Google의 Android Jetpack 라이브러리

- 추상화 계층이 매우 간결하고 이해하기 쉽기 때문에 개발자가 CRUD에 대한 기본적인 이해만 바탕이 된다면, SQL 쿼리를 특별히 학습할 필요가 없음

- 코루틴, RxJava 호환성, 자동 마이그레이션 전략 및 Type converters와 같은 유용한 기능을 제공

 

🟠 DataStore

- 로컬 저장소에 키-값 쌍을 저장할 수 있는 데이터 저장소 솔루션

- SharedPreferences의 대체 솔루션

- Coroutines 및 Flow와 같은 다른 라이브러리와의 뛰어난 호환성을 지원하여 데이터를 비동기식으로 저장하고 RxJava도 지원

- protocol buffers를 사용하여 타입 객체의 저장도 지원

728x90