Android(98)
-
Retrofit Singleton 패턴을 유지하면서 ApiService를 기능별로 분리하기
Retrofit을 이용하여 API 통신을 하려면 Retrofit 객체를 만들어야 한다.이 때, 객체에 BaseURL을 주입해줘야 하는데 대부분의 프로젝트에서는 url이 하나로 통일되지는 않을 것이다.게다가 앱 규모가 커질수록 API 호출 개수는 무수히 많아지는데이걸 하나의 파일에서 관리하기는 불가능.Retrofit 객체를 싱글톤으로 유지하면서 APIService를 기능별로 분리하려면 어떻게 해야할까?1️⃣ API 인터페이스를 기능별로 분리각 도메인(feature)별로 @Headers를 추가해서 Base URL을 구분하면 된다.✅ AServiceinterface AService { @GET("endpoint-a") @Headers("Base-Url: API_A") suspend fun ge..
2025.02.17 -
Jetpack Compose에서 remember vs rememberSaveable 차이 완벽 정리
Jetpack Compose에서는 remember와 rememberSaveable을 사용하여 상태(state)를 유지할 수 있다.하지만 두 함수의 동작 방식이 다르며, 유지되는 범위도 차이가 있다. 1️⃣ remember📌 개념remember는 Composable 함수가 재구성(Recomposition)될 때 값이 유지하지만 Activity가 재생성되거나 화면이 회전하면 값이 초기화.Composition Scope(컴포저블 생명주기) 안에서만 유지🔹 언제 사용해야 할까?UI 상태(애니메이션 진행 상태, UI 트리거 등)를 유지할 때화면 회전 후에도 데이터가 유지될 필요가 없을 때2️⃣ rememberSaveable📌 개념rememberSaveable은 remember와 비슷하지만, Activity가..
2025.02.13 -
Gradle dependencies | implementation vs api 차이, 언제 무엇을 써야 할까?
Android에서 환경 세팅을 할 때 library를 추가하기 위한 문법이 있다.implementation과 api.이 두가지를 혼용하여 사용하는 경우가 있는데 어떤 점이 다른걸까?📌 implementation vs api 차이implementation현재 모듈 내부에서만 라이브러리를 사용 가능.이 모듈을 의존하는 다른 모듈에서는 이 라이브러리를 사용할 수 없음.빌드 속도가 더 빠름 (다른 모듈에 영향을 주지 않아서!)api현재 모듈뿐만 아니라, 이 모듈을 의존하는 다른 모듈에서도 라이브러리를 사용 가능.즉, 이 모듈이 라이브러리를 공개(공유)하는 것과 같다.하지만 변경될 때 빌드 속도가 느려질 수 있음 (다른 모듈까지 영향을 받음)📌 예제 비교✅ implementation 사용dependencies..
2025.02.11 -
Gradle 빌드 최적화의 끝판왕! gradle.properties 100% 활용법
기존의 사용하던 Android Studio의 버전은 Koala였다.지난해 말, Ladybug가 출시되었고 나는 오늘 해당 버전으로 업그레이드 시도를 하였다. 역시나… 쉽지만은 않은 여정.AGP 버전을 Ladybug에 맞게 8.5로 업그레이드 시키면서 다양한 오류가 발생하였다.이 오류를 해결하기 위해 gradle.properties 내용을 많이 수정했다. 그렇다면 여기서 gradle.properties란 무엇일까?gradle.propertiesgradle.properties는 Gradle 빌드 시스템의 전역 설정을 정의하는 파일이다.이 파일은 Gradle 빌드 속도 최적화, JVM 메모리 설정, AndroidX 전환, R8 최적화 등의 설정을 관리한다. 📌 주요 역할✅ Gradle 빌드 성능 최적화✅ A..
2025.02.10 -
안드로이드 성능 최적화, 왜 경량 스레드(코루틴)를 써야 할까?
안드로이드에서는 흔히 API 통신을 할 때 Coroutine을 사용한다.코루틴은 안드로이드의 대표적인 경량 스레드 방식이다.그렇다면 스레드는 무엇이고, 그 안에서 경량 스레드는 무엇일까? 1. 스레드란?스레드(Thread) 는 프로세스 내부에서 실행되는 하나의 작업 흐름을 의미한다.흔히 프로세스와 많이 비교를 하는데 안드로이드로 따지자면 앱이라는 프로세스 안에 여러개의 스레드가 존재하는 것이다.즉, 스레드는 앱(프로세스)에서 여러개의 작업을 동시에 실행시켜주는 단위라고 생각하면 된다. 안드로이드 앱도 내부적으로 메인 스레드(Main Thread) 를 가지고 있고, UI를 업데이트하는 모든 작업은 여기서 수행이 된다.✅ 안드로이드에서 Thread안드로이드 앱에서는 기본적으로 하나의 메인 스레드(UI 스레드..
2025.02.08 -
Caused by: com.android.aaptcompiler.ResourceCompilationException: Failed to compile values resource file
🌟 들어가기 전앱에서 하드코딩 된 string을 전부 resources 파일로 고치는 작업을 하였는데,빌드하는 과정에서 오류가 발생했다.**Caused by: com.android.aaptcompiler.ResourceCompilationException: Failed to compile values resource file** 흔히 오류는 몇번째 줄에서 났는지 알려주면 그 부분만 체크하면 되는데이번 오류는 그냥 “빌드 오류나쪄~~~” 만 있으니까 찾아내기가 너무 답답… 이 경우에 체크해봐야 할 사항은 뭘까? 🔍 세부 내용특수문자를 체크하자나는 딱 values-en 을 빌드하는 과정에서 오류가 발생했다.하지만 리소스 형태도 그렇고 틀린 부분이 없었다.그렇다면 ‘영어’라는 특수성에서 시작된 문제일까? ..
2025.02.04