본문 바로가기

728x90
반응형

IT/Android

📌 코루틴을 콜백처럼! suspendCancellableCoroutine 제대로 이해하기 Android 개발이나 코틀린 백엔드 개발을 하다 보면, 기존의 콜백 기반 비동기 API를 코루틴으로 변환하고 싶은 순간이 자주 옵니다.이때 자주 사용하는 도구 중 하나가 바로 suspendCancellableCoroutine입니다.하지만 이 함수는 단순히 suspendCoroutine보다 더 강력하면서도 복잡할 수 있습니다.이번 글에서는 언제, 왜, 어떻게 써야 하는지를 이해하고, resume, tryResume, completeResume의 차이까지 함께 살펴보겠습니다.🔍 suspendCancellableCoroutine이란?기존의 콜백 기반 API를 코루틴의 suspend 함수로 변환하고 싶을 때 사용합니다.특히 코루틴이 중단(cancel)될 수 있다는 것을 고려해야 한다면, suspendCoro.. 더보기
Kotlin의 데이터 클래스 생성자에서 람다 사용을 피해야 하는 이유 이전 글에서 저는 Kotlin의 데이터 클래스 생성자에서 var나 Array를 사용하는 것이 예기치 않은 동작과 미묘한 버그를 유발할 수 있다는 점을 설명했습니다. 이러한 문제는 주로 equals(), hashCode(), copy()가 내부적으로 어떻게 작동하는지와 관련이 있으며, 특히 HashMap, HashSet과 같은 컬렉션이나 Jetpack Compose와 같은 UI 프레임워크에서 두드러집니다. 이번 글에서는 또 다른 사례인 데이터 클래스 생성자에서 람다를 사용하는 경우를 살펴보겠습니다. 두 개의 람다가 동일한 작업을 수행하더라도, 이들은 서로 다른 객체로 취급됩니다. 이로 인해 equals() 및 hashCode()의 동작이 깨질 수 있으며, 인스턴스를 저장하거나 비교할 때 미묘한 버그를 .. 더보기
Android에서 SOLID 원칙을 적용하는 15가지 실전 사례 Android 개발자로서 SOLID 원칙에 대해 자주 듣지만, 실제 프로젝트에 어떻게 적용해야 하는지는 명확하지 않을 때가 많습니다. SOLID는 소프트웨어를 더 유지보수 가능하고, 유연하며, 확장 가능하게 만드는 데 도움이 되는 다섯 가지 설계 원칙의 집합입니다. 이 원칙들은 특히 대규모 코드베이스에서 작업하거나 더 나은 테스트 가능성과 관심사의 분리를 원할 때 Android에서 강력한 도구가 됩니다. 이 글에서는 각 SOLID 원칙에 대해 Android에서의 세 가지 실전 사례를 살펴보겠습니다. Kotlin 코드 예제와 함께 자세히 설명하므로, Jetpack Compose UI를 구축하거나 API를 통합하거나 ViewModel 및 UseCase를 설정할 때 바로 적용할 수 있는 실용적인 지식을 얻.. 더보기
ViewModel 테스트 코드 작성 방법 ViewModel 인스턴스를 생성하여 테스트하는 것은 간단해 보일 수 있지만, 생명주기 이벤트나 상태 관리와 관련된 테스트에서는 여러 가지 어려움이 있습니다. 예를 들어, onCleared()와 같은 생명주기 이벤트를 시뮬레이션하거나, 인스턴스 상태 저장 및 복원 시나리오를 테스트하거나, 구성 변경 시 상태 보존을 확인하는 데 제한이 있습니다. ---ViewModelScenario 소개이러한 제한을 해결하기 위해 ViewModelScenario라는 강력한 테스트 도구가 도입되었습니다. 이 도구를 사용하려면 다음과 같은 의존성을 프로젝트에 추가해야 합니다: implementation("androidx.lifecycle:lifecycle-viewmodel-testing:2.9.0")testImplemen.. 더보기
대부분의 Android 앱이 어기는 이 한 가지 클린 코드 원칙 많은 Android 개발자들이 모르게 빠지는 동일한 아키텍처 함정이 있습니다: FirebaseMessagingService, BroadcastReceiver, Activity, Service와 같은 프레임워크 클래스에 너무 많은 로직을 넣는 것입니다. 처음에는 빠르고 쉬워 보이지만, 곧 코드는 취약해지고, 테스트하기 어려우며, 유지보수가 거의 불가능해집니다.이 글에서는 그 함정을 피하는 간단한 규칙을 소개합니다:> Android 컴포넌트는 단순하게 유지하세요. 우리는 Firebase Cloud Messaging(FCM)을 사례로 사용하겠지만, 이 원칙은 앱 아키텍처 전반에 걸쳐 적용됩니다.---FCM 푸시 알림: 사례 연구Android에서 Firebase Cloud Messaging(FCM)을 설정하는.. 더보기
Android 16에서의 Live Updates — 알림의 다음 진화를 살펴보다 Android 16에서는 Live Activities(이제는 Live Updates로 불림)가 사용자들이 실시간 정보를 더 쉽게 파악할 수 있도록 지원하는 새로운 알림 형식으로 도입됩니다.잠금 화면과 상태 표시줄을 통해 앱의 실시간 업데이트를 제공할 수 있어 사용자 경험을 한층 향상시킬 수 있습니다.Live Activities에서 Live Updates로Live Activities는 Android 14에서 처음 등장했지만, Android 16에서는 새로운 이름과 보다 강력한 기능으로 다시 태어났습니다. 이제 Live Updates는 알림 시스템 내에서의 진화를 나타내며, 잠금 화면, 상태 표시줄, 심지어 퀵 세팅(Quick Settings)에서도 실시간 정보를 제공하는 데 중점을 둡니다.Google은 L.. 더보기
Android 개발자로서 더 일찍 알았더라면 좋았을 10가지 Jetpack Compose 고급 팁 Jetpack Compose를 배우기 시작하면 기본적인 UI 요소부터 상태 처리까지 다루게 됩니다. 하지만 어느 순간부터 "더 나은 코드", "더 적은 보일러플레이트", "더 깔끔한 구조"를 찾게 됩니다.아래는 제가 Compose를 실무에서 사용하며 얻은 10가지 고급 팁으로, 여러분의 Compose 개발을 더 부드럽고 강력하게 만들어 줄 것입니다.---1. Modifier 순서가 중요하다Modifier는 순서에 따라 UI 결과에 영향을 줍니다. 예를 들어 background와 padding의 순서를 바꿔보면 다음과 같습니다.Box( modifier = Modifier .background(Color.Red) .padding(16.dp))이 경우, 빨간색 배경은 패딩을 포함.. 더보기
더 일찍 알았더라면 좋았을 Kotlin 코루틴의 숨겨진 5가지 비밀 # 더 일찍 알았더라면 좋았을 Kotlin 코루틴의 숨겨진 5가지 비밀Kotlin 코루틴은 비동기 프로그래밍을 위한 강력한 도구입니다. 하지만 많은 개발자들이 놓치고 있는 숨겨진 기능들이 있습니다. 이 글에서는 코루틴을 더 효과적으로 사용할 수 있는 5가지 비밀을 공유합니다.## 1. 코루틴 스코프는 계층적이다많은 개발자들이 코루틴 스코프가 단순히 코루틴을 실행하는 컨테이너라고 생각하지만, 실제로는 **계층적 구조**를 갖고 있습니다.val parentScope = CoroutineScope(Dispatchers.Main)parentScope.launch { // 부모 코루틴 launch { // 자식 코루틴 1 delay(1000) println("자식 .. 더보기

728x90
반응형