목록
[Android] RecyclerView 안티 패턴
RecyclerView를 사용할 때 정확히 인지하지 못하는 상태에서 빈번하게 발생할 여지가 있는 안티패턴들이 있다.안티패턴으로 인해 성능 저하나 비정상적인 동작을 유발하게 되는데, 이런 아티패턴을 피해 RecyclerView의 효율성과 안정성을 유지할 수 있다.1. ViewHolder 재사용 무시문제점RecyclerView의 가증 큰 장점 중 하나는 ViewHolder의 재사용이다. ViewHolder를 재사용하지 않고, 매번 새로운 View를 생성하거나 findViewById를 자주 호출하면 성능이 저하된다.override fun onBindViewHolder(holder: ViewHolder, position: Int) { // 매번 findViewById 호출 val textView = ..
[Android] Compose remember 간단 요약
Compose를 사용하면서 만나게되는 remember는 데이터의 상태를 저장하고 재사용할 수 있도록 해주는 함수다.remember를 활용하여 데이터의 상태를 유지하면 얻게되는 이점은 아래와 같다.1. 상태 유지: Compose에서 remember는 컴포저블 함수가 재구성될 때도 현재 상태를 유지하도록 해준다. 즉, UI가 다시 그려지더라도 상태가 유지되도록 합니다.2. 효율적인 컴포저블 재사용: remember를 사용하여 값이나 객체를 저장하면, Compose는 이 값을 다시 계산하지 않고 저장된 값을 재사용한다. 즉 불필요한 재계산을 피하고 성능을 개선할 수 있다.3. State 객체 생성: remember는 remember와 mutableStateOf를 함께 사용하여 상태를 만들고 이를 컴포저블 함수..
[Android] 시스템 설정 변경 처리하기
안드로이드 애플리케이션 개발 시 다양한 상황에서 기기 설정 변경이 발생할 수 있다. 이러한 상황에 대응하기 위해 안드로이드에서는 onConfigurationChanged 콜백 메서드를 제공한다. onConfigurationChanged란?onConfigurationChanged는 기기의 설정이 변경될 때 호출되는 메서드다. 대표적인 설정 변경 예로는 화면 회전, 화면 크기 변경, 키보드 타입 변경, 언어 설정 변경 등이 있다. 이러한 변경 사항이 발생할 때, 시스템은 해당 액티비티의 onConfigurationChanged 메서드를 호출한다.onConfigurationChanged의 사용법기본적으로, 설정 변경이 발생하면 안드로이드 시스템은 현재 액티비티를 종료하고 새로운 설정을 반영하여 재시작한다. 하..
[Android] ViewModel에서 LiveData와 StateFlow의 권장 사용 방법
안드로이드 프로젝트를 개발하면서 ViewModel을 사용할 때, LiveData 혹은 StateFlow를 활용하여 데이터 변경을 관찰하고 UI에 반영한다.이때 Mutable 변수는 private으로 설정하고 이름 앞에 _를 붙이고, 외부에 노출되는 변수는 Immutable로 사용하는 것을 흔히 볼 수 있다.일반적인 코드 컨벤션이라고 생각할 수도 있지만, 좀 더 생각해 보면 객체지향 설계 원칙과 클린 코드 관점에서 중요한 이유가 있다.권장 이유1. 캡슐화 (Encapsulation)캡슐화는 객체지향 설계의 기본 원칙 중 하나로 데이터를 직접 접근하지 못하게 하고, 데이터에 대한 접근을 제한하며, 변경을 메서드를 통해서만 할 수 있도록 한다. MutableLiveData나 MutableStateFlow를 p..
[Android] OS 10 이상에서 알림 갯수 제한 문제 해결
안드로이드 OS 10부터 특히 삼성 단말에서는 알림을 24개까지만(삼성 단말 기준) 노출할 수 있고, 그 이후에 생성된 알림은 무시되는 문제가 발생할 수 있다. 이를 해결하기 위해 가장 오래된 알림부터 순차적으로 삭제하면서 새로운 알림을 보여주는 방법을 공유한다.문제 상황알림이 24개를 초과하게 되면 새롭게 생성되는 알림은 사용자에게 표시되지 않는다. 이는 새롭게 발생되어야 하는 알림이 사용자에게 전달되지 않는 문제를 야기할 수 있다.해결 방법가장 오래된 알림부터 삭제하고 새로운 알림을 추가하는 방법으로 해결해보려고 한다.이를 위해 알림 ID를 관리하고, 알림을 생성할 때마다 알림 ID를 순환시키는 방식으로 오래된 알림을 삭제한다.구현 방법1. 알림 ID 관리알림 ID를 관리하기 위해 큐(Queue) 자..

[Android] DiffUtil과 Payload를 활용한 RecyclerView 성능 최적화
안드로이드에서 안 쓰는 앱을 더 찾기 힘들 정도로 자주 사용되는 RecyclerView는 매우 유용하면서도 늘 성능 최적화를 고려해야 하는 리스트뷰다.성능 최적화 방법에는 여러 가지 접근 방식이 존재하겠지만, 가장 기본적이고 쉽게 RecyclerView의 성능을 최적화하는 방법이 있다.결론부터 말하자면 리스트의 아이템에 변경사항이 있을 때 전체 리스트를 갱신하는 대신, DiffUtil의 payload를 활용하여 변경된 부분만 업데이트하는 방법으로 RecyclerView의 성능을 크게 향상할 수 있다.만약 RecyclerView에 대량의 데이터가 노출되고 있을때, 리스트의 아이템이 빈번하게 변경될 때마다 전체 리스트를 갱신하는 방식은 비용이 매우 크며 성능 저하에 큰 영향을 미치게 된다.DiffUtil은 ..