본문 바로가기

분류 전체보기71

[Android/Kotlin] Retrofit 에러 처리 방법: HttpException을 활용한 상태 코드별 에러 메시지 처리 최근 프로젝트에서 Unsplash API를 사용하면서 발생한 에러를 상태 코드별로 처리하는 방법을 공유하고자 합니다. 이 과정에서 Retrofit을 활용하여 서버 응답을 효율적으로 처리할 수 있는 방법을 알게 되었습니다. 특히, HttpException을 활용하여 상태 코드별로 에러 메시지를 처리하는 방법에 대해 자세히 설명드리겠습니다.문제 상황처음에는 Unsplash API를 호출할 때 잘못된 API 키를 사용하여 401 Unauthorized 에러를 발생시키고 이를 처리하고자 했습니다. 하지만 예상과 달리 onFailure 콜백이 호출되지 않았습니다. 이에 대해 원인을 분석하고 해결하는 과정을 통해 Retrofit의 에러 처리 방식을 이해하게 되었습니다.기존 코드먼저, 기존에 사용하던 NetworkU.. 2024. 7. 8.
[Android/Kotlin] DiffUtil과 ListAdapter를 활용한 효율적인 RecyclerView 업데이트 안드로이드 개발에서 RecyclerView는 리스트 형태의 데이터를 표시하는 데 많이 사용됩니다. RecyclerView를 최적화하는 방법 중 하나는 DiffUtil과 ListAdapter를 사용하는 것입니다. 이 글에서는 DiffUtil과 ListAdapter를 함께 사용하는 방법과 그 효율성에 대해 알아보겠습니다.1. DiffUtil이란?DiffUtil은 안드로이드의 RecyclerView에서 두 데이터 세트를 비교하여 변경된 항목들을 찾아내고, 해당 변경 사항만 RecyclerView에 업데이트하는 유틸리티 클래스입니다. DiffUtil을 사용하면 성능을 최적화하고, 부드러운 UI 애니메이션을 제공할 수 있습니다.2. ListAdapter란?ListAdapter는 RecyclerView.Adapte.. 2024. 7. 1.
[Android/Kotlin] 왜 notifyDataSetChanged 대신 DiffUtil을 사용해야 하는가? 안드로이드 앱 개발에서 RecyclerView를 사용하여 데이터를 표시할 때, 데이터 변경 사항을 UI에 반영하는 방법은 매우 중요합니다. 흔히 사용되는 notifyDataSetChanged()와 더 효율적인 DiffUtil에 대해 설명하고, 왜 DiffUtil을 사용하는 것이 더 나은 선택인지 예시를 통해 알아보겠습니다.1. DiffUtil이란?DiffUtil은 안드로이드의 RecyclerView에서 두 데이터 세트를 비교하여 변경된 항목들을 찾아내고, 해당 변경 사항만 RecyclerView에 업데이트하는 유틸리티 클래스입니다. DiffUtil은 RecyclerView의 성능을 최적화하고, 더 나은 사용자 경험을 제공하는 데 중요한 역할을 합니다.2. notifyDataSetChanged()의 문제점.. 2024. 6. 28.
[Android/Kotlin] 안드로이드에서 Fragment 전환 시 비동기 처리 문제 해결: OnBackStackChangedListener 사용법 안드로이드 앱 개발에서 Fragment 전환 시 발생하는 비동기 처리 문제를 해결하기 위해 FragmentManager.OnBackStackChangedListener를 사용하는 방법을 소개합니다. 이 글에서는 supportFragmentManager.popBackStack()의 비동기적 특성으로 인해 현재 Fragment를 정확하게 가져오지 못하는 문제를 해결하는 과정을 설명합니다.1. 서론안드로이드 앱 개발 시, 뒤로가기 버튼을 커스터마이징하여 사용자의 편의성을 높이고자 할 때가 있습니다. 특히 Fragment 전환 시 발생하는 비동기 처리 문제를 해결하는 것이 중요합니다. 이번 글에서는 이러한 문제를 해결하기 위해 FragmentManager.OnBackStackChangedListener를 어떻게.. 2024. 6. 27.
[Kotlin] Kotlin의 apply 문법 이해하기 코틀린(Kotlin)은 간결하고 효율적인 코드를 작성하기 위해 다양한 유용한 기능을 제공합니다. 그중 하나가 바로 apply 함수입니다. 이 블로그에서는 apply 함수의 문법과 사용법에 대해 알아보겠습니다.apply 함수란?apply 함수는 코틀린의 스코프 함수 중 하나로, 객체의 초기화를 간결하고 명확하게 할 수 있게 해줍니다. 객체를 생성하고 나서, 해당 객체의 여러 속성을 설정해야 할 때 유용하게 사용됩니다.apply 함수의 문법apply 함수는 객체의 초기화 블록을 포함하여 객체 자체를 반환합니다. 이는 초기화 코드를 간결하게 작성하고, 중복을 줄이는 데 도움이 됩니다.val person = Person().apply { name = "John Doe" age = 30 addre.. 2024. 6. 24.
[Android] 키패드가 올라오면서 UI 요소가 같이 올라오는 현상 해결하기 android:windowSoftInputMode="adjustPan"안드로이드 앱 개발을 하다 보면, 사용자가 텍스트 입력을 위해 키패드를 열 때 하단의 네비게이션 바나 특정 UI 요소들이 함께 올라오는 불편한 현상을 마주할 때가 있습니다. 특히, 이러한 문제는 하단에 고정된 네비게이션 바를 사용할 때 자주 발생합니다. 이번 포스팅에서는 이 문제를 간단히 해결하는 방법을 공유하고자 합니다.문제 상황아래와 같은 레이아웃을 가진 앱이 있다고 가정해봅시다. 하단에 BottomNavigationView가 고정되어 있고, 사용자가 텍스트 입력을 위해 키패드를 열 때 이 네비게이션 바가 같이 올라오는 현상이 발생합니다.   해결 방법이 문제를 해결하기 위해서는 AndroidManifest.xml 파일.. 2024. 6. 20.
[Kotlin] 코틀린의 Unit 타입: 무엇이고 어떻게 사용하는가? 코틀린을 사용하다 보면 Unit이라는 타입을 접하게 됩니다. 자바의 void와 유사하지만, 코틀린에서는 조금 더 유연하게 사용할 수 있습니다. Unit이란 무엇인가?Unit은 코틀린에서 반환 값이 없음을 나타내는 특수한 타입입니다. 자바의 void와 유사하지만, 코틀린에서는 Unit도 실제로 객체로 존재하며, 단 하나의 인스턴스만 가지고 있습니다. 이 인스턴스의 이름도 Unit입니다.fun exampleFunction(): Unit { println("This function returns Unit")}exampleFunction 함수는 Unit을 반환합니다. 물론, 반환 타입을 명시하지 않아도 코틀린 컴파일러는 자동으로 Unit을 반환 타입으로 간주합니다. Unit의 실제 사용 예Unit은 주로 .. 2024. 6. 14.
[Terminal - Mac]안드로이드 에뮬레이터 실행 오류 해결하기 안드로이드 에뮬레이터 실행 중 발생하는 "Pixel 7 API 34 is already running" 오류를 해결하는 방법에 대해 알아보겠습니다.이 오류는 주로 에뮬레이터의 잠금 파일(lock file) 문제로 발생하며, 이를 해결하기 위해 터미널 명령어를 사용하게 됩니다. 오류 메시지에뮬레이터를 실행할 때 다음과 같은 오류 메시지를 볼 수 있습니다.오류 원인이 오류는 에뮬레이터가 이미 실행 중이거나, 이전에 실행된 에뮬레이터의 잠금 파일이 제대로 삭제되지 않은 경우에 발생합니다. 잠금 파일은 에뮬레이터가 실행 중임을 나타내며, 이를 수동으로 삭제하면 문제가 해결될 수 있습니다. 해결 방법1. 터미널 열기 먼저 터미널을 엽니다. macOS에서는 터미널 앱을 사용하고, Windows에서는 명령 프롬프트나.. 2024. 6. 13.
[Android] 안드로이드 ConstraintLayout에서 1:1 비율로 뷰 설정하기 ConstraintLayout에서 layout_constraintDimensionRatio 사용법 ConstraintLayout은 매우 유연하고 강력한 레이아웃 시스템으로, layout_constraintDimensionRatio 속성을 사용하여 너비와 높이의 비율을 쉽게 설정할 수 있습니다.예를 들어, 너비와 높이를 1:1 비율로 설정하고 싶은 경우 다음과 같이 코드를 작성할 수 있습니다.  여기서 android:layout_width와 android:layout_height를 둘 다 0dp로 설정하고, app:layout_constraintDimensionRatio 속성을 1:1로 설정합니다.이 속성은 너비와 높이의 비율을 지정하는 것으로, 1:1은 너비와 높이가 동일하게 설정된다.. 2024. 6. 10.