[Jetpack Compose] Lazy List, 대용량 아이템 리스트 처리하기
·
Android
안드로이드에서 리스트에 수백 수천개의 아이템을 표시하기 위해서는 반드시 성능을 고려해야 합니다.이때 JetPack Compose에서는 UI 버벅거림을 피하고 효율성을 개선하기 위해 필요에 따라 아이템을 동적으로 구성할 수 있게 해주는 Lazy List 라는 컴포넌트를 제공하고 있습니다.Lazy List의 종류로는 크게 LazyColumn, LazyRow, LazyGrid가 있는데 하나씩 살펴봅시다! 📖 1. LazyColumnLazyColumn은 화면에 보이는 요소들만 실시간으로 렌더링하는 세로 방향의 스크롤 리스트입니다.전통적인 Android 개발에서의 RecyclerView와 유사한 역할을 하지만, 훨씬 직관적이고 적은 코드로 구현할 수 있다는 장점이 있습니다.일반적인 Column은 리스트에 1,0..
[Android] 안드로이드에서 예외(Exceptions) 추적하기
·
Android
안드로이드 앱 개발 과정에서 예외 추적은 매우 중요한 작업입니다. 예외를 제대로 기록하고 분석해야 문제를 재현하고, 근본 원인을 찾아내어 더 안정적인 앱을 만들 수 있습니다. 이번 글에서는 안드로이드에서 예외를 추적하는 다양한 방법을 정리해 보겠습니다. 1. Logcat을 이용한 예외 로깅가장 기본적인 방법은 Logcat을 활용하는 것입니다.예외가 발생하면 시스템은 예외 유형, 메시지, 발생 코드 줄, 스택 트레이스를 Logcat에 출력합니다.Logcat에서 E/AndroidRuntime 키워드로 필터링하면 예외 로그만 집중적으로 확인할 수 있습니다. 2. try-catch로 예외 처리 및 로깅앱이 크래시로 이어지지 않도록 방지하려면 try-catch 블록을 적절히 활용해야 합니다.예외 발생 시 로그를 ..
[Android] 안드로이드의 Looper, Handler, HandlerThread 이해하기
·
Android
안드로이드에서 멀티스레딩을 다룰 때 자주 등장하는 세 가지 컴포넌트가 있습니다. 바로 Looper, Handler, HandlerThread입니다. 이들은 스레드를 관리하고, 메시지/작업을 큐에 넣어 순차적으로 처리하며, UI 스레드와의 통신을 가능하게 합니다. 🥯 LooperLooper는 안드로이드의 스레딩 모델에서 메시지 큐를 모니터링하고 처리하는 핵심 컴포넌트입니다.스레드를 살아있게 유지하며, 큐에 들어온 메시지나 작업을 순차적으로 꺼내 처리합니다.주요 역할메시지 큐를 지속적으로 모니터링하고 메시지나 작업을 적절한 핸들러로 전달스레드가 종료되지 않고 계속해서 작업을 기다릴 수 있도록 유지특징메인(UI) 스레드에는 기본적으로 Looper가 붙어 있음워커 스레드의 경우 Looper.prepare() ..
[Android] 런타임 권한(runtime permissions) 처리
·
Android
🍋‍🟩 런타임 권한(Runtime Permissions)안드로이드 6.0(API 23) 이상에서는 런타임 권한(Runtime Permission) 또는 위험 권한(Dangerous Permission)이라는 개념이 도입되었습니다. 🍋‍🟩 런타임 권한이란?런타임 권한은 앱이 제한된 데이터에 접근하거나, 시스템 및 다른 앱에 영향을 줄 수 있는 동작을 수행할 때 반드시 요청해야 하는 권한입니다.설치 시 자동으로 부여되지 않으며, 앱 실행 중 실제로 필요할 때 팝업 다이얼로그로 요청됩니다.즉, 개발자는 권한이 이미 부여되어 있다고 가정해서는 안되며, 기능 실행 전마다 권한을 확인하고 필요 시 요청해야 합니다. 🍋‍🟩 위험 권한 예시런타임 권한 대부분은 민감한 사용자 데이터와 관련이 있습니다.위치 정..
[Android] SparseArray에 대하여
·
Android
SparseArray는 정수(int)를 객체(Object)에 매핑하는 안드로이드에 최적화된 자료구조입니다. 일반적인 배열과 달리 인덱스가 연속적일 필요가 없어 중간에 값이 비어 있는(gap) 형태도 허용합니다.이 클래스는 HashMap를 사용하는 것보다 메모리를 더 효율적으로 쓰도록 설계되었습니다. 🍋‍🟩 SparseArray의 주요 특징메모리 효율성키-값 매핑을 위해 HashTable을 사용하는 HashMap과 달리 SparseArray는 오토박싱(int → Integer 변환)이 필요 없습니다. 각 엔트리를 별도의 객체로 포장하지 않고, 내부 배열에 직접 저장하기 때문에 훨씬 적은 메모리를 소비합니다.성능매우 큰 데이터 셋의 경우 HashMap만큼 빠르지는 않지만, SparseArray는 메모리 ..