본문 바로가기

Android42

[Kotlin,Java] 코틀린과 자바에서 MutableList 선언 및 조작의 차이점 탐구 코틀린과 자바에서 MutableList를 선언하는 방법은 언어의 특성에 따라 다소 차이가 있다. 아래에서는 각 언어에 따른 MutableList 선언 방법을 코드를 통해 설명하겠다. 코틀린에서의 MutableList 선언 코틀린에서는 mutableListOf 함수를 사용하여 간결하게 MutableList를 선언할 수 있다. 코틀린의 표준 라이브러리는 다양한 컬렉션 타입을 쉽게 생성할 수 있는 함수들을 제공한다. val mutableList: MutableList = mutableListOf(1, 2, 3) mutableList.add(4) // MutableList에 아이템 추가 println(mutableList) // 출력 결과: [1, 2, 3, 4] 코틀린에서는 타입을 명시적으로 지정해주거나, 타.. 2024. 4. 23.
[Android] RecyclerView의 notifyItemChanged 사용 시 발생하는 깜빡임 문제 해결 방안 RecyclerView에서 notifyDataSetChanged를 사용해 어댑터 아이템들을 업데이트할 때 발생하는 성능 문제를, 특정 아이템만을 업데이트하는 notifyItemChanged를 통해 해결할 수 있었다. 그러나 이 방식을 적용하더라도, 엘레베이터의 층수가 1초마다 변하면서 UI를 업데이트할 때 깜빡임과 버벅거림 문제가 계속 발생했다. 이 문제의 원인을 조사해보니, Android의 RecyclerView를 위한 SimpleItemAnimator의 기본 애니메이션 효과가 원인임을 알아냈다. SimpleItemAnimator는 RecyclerView 아이템 애니메이션을 구현하기 위한 추상 기본 클래스로, RecyclerView.ItemAnimator를 확장한다. 공식 문서의 RecyclerView.. 2024. 4. 22.
[Kotlin,Java] 자바와 코틀린에서의 프로퍼티 선언 방식의 차이점 설명 자바와 코틀린 모두에서 프로퍼티는 클래스의 상태를 나타내는 중요한 구성 요소이다. 그러나 코틀린은 프로퍼티를 선언하고 사용하는 방법에서 자바에 비해 더 단순하고 강력한 기능을 제공한다. 자바에서의 프로퍼티 생성 자바에서는 프로퍼티를 만들기 위해 필드(변수)와 그 필드를 접근하기 위한 getter 및 setter 메소드를 명시적으로 선언해야 한다. java public class Person { private String name; // 필드 // Getter public String getName() { return name; } // Setter public void setName(String name) { this.name = name; } } 코틀린에서의 프로퍼티 생성 코틀린에서는 필드, gette.. 2024. 4. 21.
[Android] RecyclerView 데이터 변경 시 UI 업데이트 최적화를 위한 알림 메서드 활용법 제어 즐겨찾기 영역에서 특정 기기를 호출할 때마다, 전체 기기 목록이 업데이트되는 문제가 발생했었다. 이런 상황은 반복적으로 성능 문제를 일으켰다. 문제의 원인을 분석해본 결과, RecyclerView의 어댑터가 UI에 데이터 변경 사항을 알릴 때 notifyDataSetChanged 메소드를 사용하고 있었기 때문에, 다음과 같이 전체 기기 목록이 갱신되는 것을 확인했다. 이 문제는 어댑터의 아이템 위치값(position)을 활용하여 notifyItemChanged 메소드를 호출함으로써 해결할 수 있었다. notifyItemChanged는 지정된 위치의 아이템만을 업데이트하므로, 전체 목록을 갱신하는 것보다 훨씬 효율적이다. 이 방법으로 성능 문제를 개선하고 사용자 경험을 향상시킬 수 있었다. 이 경험을.. 2024. 4. 21.
[Android] LiveData의 이해: Android 앱에서 데이터와 UI의 효율적 동기화 LiveData는 Android 아키텍처 컴포넌트의 일부로, 데이터 관찰 및 UI 업데이트를 위한 데이터 홀더 클래스이다.LiveData는 관찰 가능한 데이터 클래스로서, UI 컴포넌트가 데이터의 변경 사항을 관찰하고, 데이터가 변경될 때마다 UI를 자동으로 업데이트할 수 있도록 해준다.LiveData의 주요 특징과 작동 방식은 다음과 같다. 1. 생명주기 인식LiveData는 생명주기를 인식하는 컴포넌트로서, Android 생명주기에 따라 관찰자(Observer)에게 데이터 변경을 통지한다. 즉, 액티비티나 프래그먼트의 생명주기 상태를 고려하여, 이 컴포넌트들이 활성 상태(STARTED 또는 RESUMED 상태)일 때만 데이터 업데이트를 수신한다.이로 인해 메모리 누수, 액티비티가 종.. 2024. 4. 21.
[Android] RecyclerView에서 notifyDataSetChanged() 호출 후 콜백 메소드 활용하기: setInitCallback() 호출 과정 분석 제어 즐겨찾기 영역에서 기기 호출 후, observe 메소드가 활성화되면서 발생하는 notifyDataSetChanged()의 실행 과정 및 이후 setInitCallback() 호출 메커니즘에 대해 분석한 내용을 정리 해 두고자 한다. notifyDataSetChanged() 실행의 의미 notifyDataSetChanged()를 호출하면, 이는 RecyclerView에 데이터셋이 변경되었음을 알리고 UI를 갱신하라는 신호를 보내는 역할을 한다. 데이터셋의 변경 사항을 RecyclerView가 감지하고, 이에 따라 UI를 업데이트하는 과정이 시작된다. setInitCallback() 호출 과정 ControlAdapter 내부 코드 분석 결과, onBindViewHolder 메소드에서 아이템에 대한 bi.. 2024. 4. 21.
[Android] RecyclerView의 성능 비결: ViewHolder 사용의 중요성 RecyclerView에서 ViewHolder를 사용하는 주요 이유는 성능 향상과 메모리 사용 최적화에 있다. RecyclerView는 대량의 데이터 세트를 효율적으로 표시하기 위해 설계된 안드로이드의 강력한 UI 컴포넌트이다. 데이터가 많을 때, 모든 항목을 한 번에 화면에 표시하는 것은 메모리를 많이 사용하고, 앱의 반응 속도를 느리게 할 수 있다. 여기에서 ViewHolder 패턴이 중요한 역할을 한다. ViewHolder 패턴의 주요 기능 뷰 재사용(Recycling): ViewHolder 패턴을 사용하면 스크롤할 때마다 새로운 뷰를 생성하는 대신, 화면에서 사라진 뷰를 재사용할 수 있다. 이는 뷰의 생성과 파괴로 인한 비용을 줄여준다. 뷰 찾기 비용 최소화(FindViewById): 뷰를 재사용.. 2024. 4. 21.
[Java] Map 인터페이스와 HashMap 구분과 Map 인터페이스를 통해 HashMap을 사용하는 것이 좋은 이유 자바에서 키와 값의 쌍으로 데이터를 관리할 때, Map 인터페이스가 기본적으로 사용된다. 이 인터페이스는 각 키가 고유한 값을 가지도록 보장하며, 이를 통해 데이터를 효율적으로 저장하고 검색할 수 있게 해 준다. Map 인터페이스의 여러 구현체 중에서도 HashMap이 가장 널리 사용되지만, TreeMap이나 LinkedHashMap 같은 다른 구현체들도 특별한 사용 사례와 이점을 제공한다. Map interface의 구현체들에 대한 내용은 추후에 공부 후 블로깅 해 보겠다. 이번 글에서는 특히, Map 인터페이스를 통해 HashMap을 사용하는 것이 가지는 이점에 초점을 맞춰 보겠다. 이러한 접근 방식은 자바 프로그래밍에서 데이터를 효율적으로 관리하는 방법에 도움이 될 것 이다. HashMap을 직접 .. 2024. 4. 9.
[Java] 자바 빌더 패턴: 복잡한 객체 생성의 단순화와 한계점 탐구 회사에서 담당하게 된 부분의 코드 분석 중, 자바에서 많이 사용되는 디자인패턴 중 하나인 "빌더 패턴"에 대해 알게 되었다. 이에 빌더패턴의 사용 목적, 방법 그리고 이점에 대해 알아본 내용들을 정리해 두고자 한다. 자바에서 빌더 패턴(Builder Pattern)은 주로 복잡한 객체의 생성 과정을 단순화하기 위해 사용된다. 이 패턴은 객체의 생성과 표현을 분리함으로써, 동일한 생성 과정을 통해 서로 다른 표현 결과를 얻을 수 있게 해 준다. 빌더 패턴은 특히 많은 수의 매개변수를 가진 객체를 생성할 때, 그리고 이 매개변수 중 일부는 필수적이고 일부는 선택적일 때 유용하다. 빌더 패턴사용의 목적과 결과 목적: 복합 객체의 생성 과정을 단계별로 진행하여 최종적으로 객체를 안정적으로 생성한다. 결과: 클라.. 2024. 4. 9.