안드로이드 44

[Android] Compose에서 BindService 사용하기

https://developer.android.com/develop/background-work/services/bound-services 바인딩된 서비스 개요  |  Background work  |  Android Developers이 페이지는 Cloud Translation API를 통해 번역되었습니다. 바인딩된 서비스 개요 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 바인드된 서비스란 클라이언트-developer.android.com가끔씩 앱이 실행중이지 않을 때 앱이 백그라운드에서 무언가 작업이 실행되어야 하는 경우가 있습니다.예를 들면 만보기, 파일 업로드/다운로드, 음악 플레이어 등과 같은 것들이 있습니다.이런 것들은 보통 서비스를 활용해서 구현하게 됩니다...

개발/Android 2025.03.20

[Android] Compose 성능 개선 - Compose Compiler Metrics Report와 Restartable, Skippable

안드로이드 개발을 하시는 분이라면 Compose로 개발을 하고 계시거나 개발할 계획이 있을 것입니다.Compose는 안드로이드 앱에서 UI를 만들기 위해 사용하는 도구이기 때문에, 사용자에게 안정적이고 빠른 화면을 보여주기 위해 성능을 고려해야 합니다.이를 위해선 Compose가 어떻게 동작하는지에 대한 이해, 그리고 그 이해를 바탕으로 효과적으로 동작할 수 있도록 코드를 작성하는 것이 중요할 것입니다.하지만 나름대로 이해도 해보고 잘 작성했다고 하더라도 실제로 잘 한게 맞는지를 확인하기 위해선 어떤 지표를 확인하는게 좋겠죠.이 포스팅에선 지표를 확인하고 이해해보는 것을 다루겠습니다. Compose Compiler Metrics ReportUI를 효율적으로 작성한다는 것은 그려내는 시간을 단축하는 것도 ..

개발/Android 2025.02.17

[Android] 의존성 주입 - Starting with Koin Annotations (feat. Compose, KMP, Circuit)

최근 Compose Multiplatform을 활용하여 사이드 프로젝트를 진행중입니다.Android, iOS, Flutter를 전부 실무에서 활용해본 경험으로 미루어 봤을때 꽤 좋은 선택지가 될 것이라는 기대 덕분인데요.좋은 아키텍처가 무엇인지 고민하던 찰나, Slack에서 개발한 Circuit 아키텍처가 마음에 들어 사용해보고 있습니다.현재 구글이 KMP를 적극 지원중이고 여러 Jetpack 라이브러리들이 KMP를 지원하도록 업데이트 되고 있으니 가까운 미래에 바뀔지도 모르지만요.아키텍처를 구성한다는 것은 의존성 주입 또한 중요한 문제가 될 텐데요.안드로이드 개발자라면 Jetpack Hilt를 사용하고 있을테지만 안타깝게도 KMP에서는 사용이 어렵습니다.그래서 코틀린으로 작성된 Koin이 좋은 대안이 ..

개발/Android 2025.02.14

[Android] 안드로이드 메모리 누수에 관하여

최근 운영하고 있는 서비스는 Firebase Crashlytics를 사용해서 앱의 로그를 수집하고 있습니다.99.99%정도는 크래쉬가 발생하지 않지만 일부 크래쉬가 리포트되고 있는데, 그 중 OOM이 꽤 비중을 차지하고 있습니다.이미지 또는 동영상이 보이거나 백그라운드에서 센서를 활용하는 등의 기능이 있어서인지 OOM이 크래쉬의 주된 원인이 되고 있는데요.이러한 OOM의 원인은 메모리에 비해 큰 이미지, 동영상과 같은 것을 로드할때도 발생하지만 메모리 누수에 의해 발생하기도 합니다. 메모리 누수메모리 누수는 필요하지 않은 메모리를 계속 차지하고 있는 것을 말합니다.사용하지 않는 메모리가 계속 공간을 차지하기 때문에 필요한 메모리들이 할당될 공간이 점점 적어지고 결과적으로 메모리가 부족한 상황에 이르게 됩..

개발/Android 2025.02.04

[Android] Jetpack Compose - Layout으로 커스텀 레이아웃 만들기

프로젝트 진행 중에 커스텀 레이아웃이 필요했습니다.스크롤이 가능한 Column에서 staggered layout이 필요했는데, LazyVerticalStaggeredGrid을 사용하기엔 중첩 스크롤 문제가 발생했기 때문입니다.그래서 이러한 상황에서 사용 가능한 staggered layout을 구현하기로 했습니다.이를 위해 커스텀 레이아웃을 구현하기 위해 기본적으로 이해가 필요한 부분이 있었기 때문에 이에 대해 포스팅합니다. LayoutCompose에서 기본적으로 제공하고 있는 Scaffold, Surface, Column, Row 등은 Layout를 기본적으로 사용하여 구현되어 있습니다.다음은 하나의 예로, Column 컴포저블 함수의 코드입니다.@Composableinline fun Column( ..

개발/Android 2025.02.02

Kotlin Coroutines, 에러 처리와 SupervisorJob

오늘날 Kotlin 기반의 안드로이드 앱을 개발하고 있다면 Coroutines를 사용하고 있을 것입니다.그렇다면 십중팔구 Jetpack ViewModel에서 제공하는 ViewModelScope를 사용하고 있을텐데요.ViewModelScope를 생성하는 코드를 보면 SupervisorJob이 등장합니다.package androidx.lifecycle.viewmodel.internalinternal fun createViewModelScope(): CloseableCoroutineScope { val dispatcher = try { Dispatchers.Main.immediate } catch (_: NotImplementedError) { EmptyCoroutineCo..

개발/Android 2025.01.29

Kotlin Coroutines, 구조화된 동시성 (Structed Concurrency)

오늘날, 안드로이드 개발은 Kotlin이 메인 프로그래밍 언어로 자리잡고 있습니다.이로 인해 비동기 작업은 Kotlin Coroutines(코루틴)이 완전히 자리를 잡고 있는데요.일부 역사가 긴 서비스를 보유한 회사에서는 Rx 계열을 사용하는 경우도 있지만, 아마 코루틴으로 마이그레이션하는 작업을 진행하지 않을까 예상됩니다.코루틴은 구조화된 동시성이라는 원칙을 따르고 있습니다.https://kotlinlang.org/docs/coroutines-basics.html#structured-concurrency Coroutines basics | Kotlin kotlinlang.org구조화된 동시성은 동시성 작업간에 부모-자식과 같은 관계를 형성하여 가독성, 유지보수성, 안정성이 뛰어난 동시성 코드를 작성할 ..

개발/Android 2025.01.27

[Android] Retrofit Call Adapter를 활용해서 효과적인 에러 핸들링 하기

요즘 앱을 개발하면 API를 사용하지 않는 경우가 거의 없는 듯 합니다.그렇기 때문에 Retrofit은 굉장히 흔하고 유용한 네트워킹 라이브러리이며 오랫동안 사용되어 오고 있습니다.최근엔 Ktor를 사용하는 사례도 종종 보입니다만, 아직까지 Retrofit을 사용하는 것이 대부분 일 것입니다.이와 더불어 앱 권장 아키텍처 또는 MVVM, 클린아키텍처 또한 매우 흔한 기술 스택으로 자리잡고 있습니다.그러다보니 ViewModel에서 Repository, UseCase를 통해 API로부터 오는 데이터를 얻고 있습니다.이러한 아키텍처 구성은 레이어간에 느슨한 결합을 만드는 것이 주된 목적 중 하나이기 때문에 인터페이스로 의존하고 있으며, 서로간에 구체적인 구현은 모르게 되는 상황이 된 것이죠.이러한 상황에서 A..

개발/Android 2025.01.24

[Android] APK 파헤치기

우리가 열심히 개발한 안드로이드 프로젝트는 결과적으로 APK(또는 AAB)로 변환됩니다.APK는 Android Application Package의 약자로, 이름부터 안드로이드 어플리케이션을 위한 묶음이며 확장자는 apk입니다.과거에는 안드로이드 어플리케이션의 결과물이 APK만 존재했었고, 이것을 플레이스토어에 올리기도 하고 인터넷 등을 통해 공유하여 설치할 수 도 있었습니다.그러다 AAB(Android App Bundle)이라는 것이 소개되고 어느순간 플레이스토어 배포는 AAB만이 가능한 형태로 바뀌었습니다.왜 이렇게 바꾸었을까요?우리는 안드로이드 앱을 개발할 때, 다양한 종류의 기기, 국적 등에 대응하기 위해 다양한 방법을 시도합니다.DPI 별로 이미지 리소스를 나누거나, 국적별로 문자열 리소스를 나..

개발/Android 2025.01.05

[Android] Jetpack Compose - UI Test. 요약본 리뷰

요즘 채용공고를 보면 자격요건 또는 우대요건에 Unit Test, UI Test와 같은 요구사항이 자주 등장합니다.제가 속해있던 회사들에선 주로 Unit Test를 필수로 작성하였습니다. 그리고 Jenkins와 같은 툴을 통해 자동화된 테스트를 수행하여 제품의 안정성과 품질을 유지 또는 향상시키기 위해 노력했습니다.그러나 UI Test의 경우 리소스와 같은 현실적인 요건, 그리고 QA를 통한 검증 등을 핑계로 작성되지 않는 경우가 잦았습니다.지난 과거를 반성도 해볼 겸, Compose에서 UI Test를 작성하는 방법에 대해 리뷰해보고자 합니다.https://developer.android.com/develop/ui/compose/testing/testing-cheatsheet 테스트 요약본  |  Je..

개발/Android 2024.12.09
반응형