안드로이드 5

Kotlin Delegation 알아보기(1) - Delegated Class

안드로이드 개발을 하면서 by lazy {} , by remember {} 등 by 키워드를 자주 사용하고 있었다. 그런데 by 키워드가 Kotlin Delegation을 위한 문법이라는 것을 알고 있었지만, Delegation(위임)이라는 것에 대해 제대로 알고 있지 않다는 생각이 들어서 이번 기회에 알아보려고 한다. 👀 어떨 때 상속 대신 위임을 써야할까? 상속과 위임은 모두 객체지향 프로그래밍에서 사용되는 디자인 패턴으로, 두 방식 모두 클래스를 다른 클래스로부터 확장한다. 차이점을 살펴보자면 상속은 해당 클래스에 귀속되는 것이기 때문에 클래스가 다른 클래스들 사이에서 선택할 권한을 주지 않는다. 반면 위임은 객체 자신이 처리해야 할 일을 다른 클래스 인스턴스에게 위임할 수 있는 것이기 때문에 상속..

Kotlin 2023.02.16

Firebase Crashlytics 적용하기

작년 여름부터 진행하던 사이드 프로젝트가 드디어 어느정도 마무리 되었다. 그래서 사이드 프로젝트를 스토어에 올리기 전에 Firebase Crashlytics를 적용하려고 한다. Firebase Crashlytics에 대해 간단히 소개하자면 “앱이 비정상적으로 종료되었을 때 개발자에게 알려주는 일종의 오류 보고 도구”이다. 그리고 공식 문서에서는 아래와 같이 소개한다. 실시간 비정상 종료 보고 도구인 Firebase Crashlytics는 실제 사용자에 미치는 영향을 기반으로 가장 심각한 비정상 종료의 우선순위를 지정하고 문제를 해결하는 데 도움을 줍니다. https://firebase.google.com/products/crashlytics?hl=ko Firebase Crashlytics | 강력한 An..

Android 2022.12.08

안드로이드 접근성 - 대체 텍스트를 적용해보자!

📱 접근성이란 모바일 접근성이란 웹 접근성과 같은 개념으로 장애를 가진 사람이든 일반인이든 구애를 받지 않고 동등하게 정보에 접근할 수 있도록 설계하고 디자인/개발하는 것을 의미한다. 즉, 모두에게 유용하게 사용되는 앱이 되기 위해서는 접근성 처리가 필요하다. 안드로이드에서는 “TalkBack”, “시인성 향상”, “청각보조” 등 다양한 방법으로 접근성을 제공하고 있는데 이번 글에서는 그 중에서도 대체 텍스트(talkback)를 통해 음성 피드백을 제공할 수 있는 방법을 알아보겠다. ꈍꈊꈍ 🗣 TalkBack이란? TalkBack은 Android 기기에 포함된 Google 스크린 리더입니다. TalkBack을 사용하면 기기를 보지 않고도 제어할 수 있습니다. 출처: https://support.googl..

Android 2022.11.22

안드로이드 저장소 권한의 변화와 새롭게 등장한 Photo Picker!

프로필 사진 변경, SNS 피드 작성 등 모바일 앱에서 사진을 가져오는 기능은 정말 많이 쓰이는 것 같다. 내가 지금 하고 있는 사이드 프로젝트에서도 사진을 가져오는 기능이 있어서 안드로이드 EXTERNAL_STORAGE_READ 권한이 필요했다. 그런데 권한 동의를 해고 권한이 부여되었다고 판단되지 않았다! 안드로이드 10 이상의 기기에서만 이런 상황이 발생했는데, 이에 대해 알아보던 중 “Permissionless is the future of Storage on Android” 라는 아티클을 발견했고 이 글에서 약간의 힌트와 Photo Picker라는 새로운 툴에 대해 알 수 있었다. 💀 기존 storage 권한 지원 중단 많은 사용자들이 외부 저장소 접근 권한에 대해서 앱이 어떤 파일에 접근하려는..

Android 2022.10.27

Rx 말고, Flow로 다중클릭 방지하기 (throttleFirst)

🤔 고민의 시작 기존의 RxJava를 사용했던 코드들을 Flow로 교체하다가 막힌 부분이 바로 throttleFirst()이다. 다중클릭 방지 등을 위해서는 일정 시간동안 들어온 값 중에서 가장 첫번째 것만 발행하고 나머지는 무시하는 RxJava의 throttleFirst()연산자가 필요한데, Flow에서는 해당 기능의 연산자를 지원하지 않는다. 그래서 이 연산자를 직접 구현해보기로 했다. 🆖 기존 RxJava를 사용한 다중클릭 방지 코드 private fun View.setRxBindingClicks() { this.clicks() .throttleFirst(1000, TimeUnit.MILLISECONDS) .subscribe { onClick(id) } .addTo(disposeBag) } priv..

Android/Coroutine 2022.09.25