본문 바로가기

Android

(38)
버튼 중복 클릭을 막아보자 (Android ThrottleFirst) 🧑🏻‍💻오늘의 할 일 앞으로 프로젝트를 진행하면서 사용한 기술들과 다양한 이슈들에 대해서 글을 적어볼 예정입니다. 그 시작으로 오늘은 버튼의 중복 클릭을 막는 방법에 대해 소개해보겠습니다. 그전에 저희 다온길 프로젝트에 대해서 소개하겠습니다. 다온길은 다 함께 오는 길이라는 뜻으로, 한국 관광 정보 공사 무장애 여행 API를 사용해 장애인, 노약자, 영유가 가족들이 이용할 수 있는 여행지, 관광지를 소개하는 어플리케이션으로 무장애 여행(Barrier-Free Travel)은 장애인, 고령자, 임산부 등 이동에 제약이 있는 사람들이 불편함 없이 여행을 즐길 수 있도록 배려하는 여행 형태입니다.👨🏻‍🏫 Throttle사실 이전에 스로틀과 디바운싱에 대한 글을 쓴 적이 있었습니다. 디바운싱은 바로 ..
ViewLifeCycleOwner 제대로 알고 사용해보자 👩‍💻 오늘의 할 일그동안 단순히 액티비티와 프래그먼트에서는 생명주기를 가지는 컴포넌트에서는 해당 컴포넌트의 생명주기에 종속되는 코루틴을 사용해야 한다고 알고 있었습니다. Activity에서는 lifeCycleScope, Fragment에서는 ViewLifeCycleOwner를 사용하는게 바로 이 이유죠.  그렇다면 왜 두 컴포넌트는 각각 다른 코루틴을 사용하는 걸까요? 이는 Fragment의 두 가지 생명주기와 깊은 연관이 있습니다. 저도 안드로이드 개발을 시작한지 약 반년이 다되어 가도록 이 프래그먼트의 두 가지 생명주기에 대해 놓치고 있던 내용이라 한 번 정리하겠습니다.  📖 Fragment의 두 가지 생명주기처음 Fragment LifeCycle에 대해 공부할 때도 봤던 그림인데 제가 간과한..
Room Like + StateFlow debouce와 Throttle 👩‍💻 오늘의 할 일 오늘은 Room의 검색 기능에서 사용되는 Like, StateFlow에서의 Debounce와 Throttle를 실제 프로젝트에 적용하기 위해 사전 공부를 해보겠습니다. Room과 StateFlow의 새로운 기술이라니 벌써부터 두근두근 잼있을거 같네요! 📖 SQL LIKE SQL Query에서의 Like는 특정 문자가 포함되어 있는지 검색할 때 사용됩니다. Like는 ' % ' 로 표현되는데, 그 위치에 따라 다르게 동작하게 됩니다. 1. 특정 문자로 시작하는 데이터 검색 SELECT * FROM STORE_INFO WHERE STORE_NAME LIKE '%짱구'; 2. 특정 문자로 끝나는 데이터 검색 SELECT * FROM STORE_INFO WHERE STORE_NAME LIK..
[Android] 프로퍼티의 초기화 시점이 중요한 이유! 🚨 Trouble Shooting 다음과 같이 context를 매개변수로 전달받는 클래스를 TestActivity에서 호출할 때 다음과 같은 에러가 발생했습니다. 파란 줄을 보시면 context를 전달받을 때 null이 전달되어 NullPointerException 이 발생했습니다. class FusedLocationProvider ( private val context: Context, private val listener: OnLocationUpdateListener ) class TestActivity: AppCompatActivity(), OnLocationUpdateListener { private var fusedLocationProvider = FusedLocationProvider(this..
[Android] Room Database Migration 🎉 개요 Database를 사용하다보면 필연적으로 데이터 베이스 스키마를 변경하는 상황이 발생합니다. Room은 데이터 베이스 스키마가 변경되면 version을 올려줘야 합니다. 이 때, 데이터 베이스를 마이 그레이션 할 수 있는 방법을 소개하겠습니다. 🎉 Migration 1️⃣ Version Up + fallbackToDestructiveMigration( ) 가장 기본적으로 Migraion할 수 있는 방법은 Version을 올리고 fallbackToDestructiveMigration( ) 메소드를 사용하는 것입니다. 하지만 이렇게 할 경우 기존의 데이터가 모두 삭제된다는 치명적인 단점이 있습니다. fallbackToDestructiveMigration( ) 데이터 베이스 스키마가 변경되었을 때 기..
[Android] Room TypeConverter 📕 Room의 Type 제한 Room에 데이터를 저장할 때 원시 타입( char, int, short, long, float...)과 Wrapping Type만 지원합니다. 그 이유로 공식문서는 다음과 같이 이유를 설명 합니다. 효율성 및 성능 원시 타입과 래핑 타입은 메모리 사용 및 연산 효율성이 더 뛰어나기 때문에 데이터베이스 작업 시 성능을 최적화할 수 있어 객체가 아닌 기본 타입을 사용함으로써 메모리 소비가 감소하고, 데이터베이스 연산이 빨라집니다. Room에서 사용자가 정의한 클래스나 다른 복잡한 타입을 사용하려면 TypeConverter를 사용해 변환해 주어야 합니다. Room을 사용하여 복잡한 데이터 참조 | Android 개발자 | Android Developers Room을 사용하여 복잡..
[Android] Room Database 🎉Room 이란 ? 제가 안드로이드를 맨 처음 공부했을 땐 Local Database로 SQLite를 사용했습니다. 하지만 SQLite만으론 공식문서에서 다음과 같은 문제점을 제시했습니다. 즉, Database에 접근하기 위한 Query를 Database Schema가 변경됨에 따라 사용자가 Query를 수동으로 업데이트 해야 되는데, 이 과정은 시간도 오래 걸리고 오류가 발생할 가능성이 높습니다 Room은 이를 개선해 만든 AAC(Android Architecture Components)로 다음과 같은 역할을 수행합니다. 1. ORM(Object Relational Mapping) Library Room은 데이터베이스의 테이블과 앱의 객체 사이의 매핑을 자동으로 처리해주는 ORM 라이브러리로 DB Da..
[Android] Jetpack WorkManager 📕 WorkManager란? Android Jetpack Library의 WorkManager는 Background Task를 위해 만들어졌습니다. 안드로이드 M(API 23) 부터 Background Task 제약 사항들이 점차 추가되며 개발자들은 Service, JobSchduler, JobDispatcher등을 사용해 개발했지만 API의 문제들로 인해 WorkManager가 등장하게 되었습니다. 이 글에선 기존 API의 문제점과 Workmanager에 대해 알아보겠습니다. 🤔 Background 상태의 앱이 왜 자동으로 종료될까요 ? 안드로이드 커널은 리눅스 커널은 기반으로 개발 되었지만 가장 큰 차이점은 Swap Space가 존재하지 않습니다. 📌Swap Space 주기억장치(RAM)의 용량이 부..