본문 바로가기

ANDROID

(125)
[Kotlin/UnitTesting] LiveData Mocking하기 유닛 테스트를 신나게 적용하다 보면, 검증해야 하는 변수나 결과가 LiveData와 맞물려 들어가는 로직과 맞닥뜨릴 수 있다. 여기서 특정 결과값이 특정 LiveData를 Observing하는 방식으로 도출된다면, Mocking하는 것도 쉽지 않을 것이다. 이런 케이스를 해결하기 위해 실 Stub LiveData를 만들어 초기값을 넣어줌으로써, 본래 수행하려던 테스트 케이스를 성공적으로 돌릴 수 있었다! 사용 예를 남기고자 Pizza라는 data class를 담는 LiveData를 예시로 테스트 코드를 작성해보겠다. 테스트 환경은 아래와 같다. Mockito LiveDataTesting https://github.com/jraska/livedata-testing Koin DI Coroutine Clean..
[Kotlin/Coroutine] Kotlin Coroutines 101 : 코루틴을 쉽게 이해해보자! 최근에 여유가 생기면서 코틀린부터 코루틴, flow 등 공부하고 싶던 부분들에 대해 다시 들여다보기 시작했다. 공부를 하면서 눈에 쏙 들어왔던 건 Android Developer 채널에 올라온 아래의 영상이었다. Kotlin Coroutines 101 - Android Conference Talks 일전에 Kotlin in action에서 코루틴에 대해 살펴보기는 했지만, 이 영상을 본 뒤론 이 영상만큼 코루틴의 장점과 사용 방법 등에 대해 잘 알려주는 영상은 앞으로도 없지 않을까 싶다! (개발 영상치고 8만회의 뷰를 기록한 것이 하나의 반증이 되지 않을까?) 해당 영상을 기반으로 코루틴의 장점과 의의, 사용 예 등에 대해 다시 한번 정리하고자 한다. 1. 코루틴은 무엇이며, 무엇을 해결해 주는 걸까? ..
[Android] Android lifecycle과 savedInstanceState 안드로이드의 시작과 끝은 Activity와 Fragment의 lifecycle이다 할 수 있을 정도로 lifecycle에 대한 중요성은 여러번 말해도 모자르지 않다 싶다. 이전부터 개발자들이 가져왔던 고민들은 앱의 화면방향 전환이 일어나는 경우, 언어가 변경되는 경우, 화면 해상도가 변경되는 경우 등 다양한 변수로 인해 기존의 Activity 혹은 Fragment가 destroy된 이후 다시 재생성되는 케이스를 어떻게 대처할 것인지 일 것이다. 이러한 환경에서 주요 변수를 보존하기 위해 안드로이드는 savedInstanceState를 제공한다. 재생성 및 savedInstanceState에 관해 중요한 내용들을 간단히 정리해 보았다! Activity 및 Fragment Activity가 Backgroun..
[Android/UI-UX] 유동적인 TextView의 사이즈를 제한하고, 정렬까지(with ConstraintLayout) UI 구성을 하면서 때때로 유동적으로 늘어나는 View 때문에 골머리를 앓을 때가 많다. 극단적으로 짧은데서 극단적으로 길어질 수 있는 텍스트를 담는 TextView, 그리고 이 좌측에 붙어야 하는 ImageView까지.. 하드코딩으로 가기 쉬운 요구사항 들이다. 다행스럽게도 안드로이드에는 ConstraintLayout이 있었으니, 이를 이용해 아래 세가지의 요구사항을 모두 충족시킬 수 있었다. TextView는 화면의 우측에 붙는다. TextView는 화면의 중앙 영역까지만 늘어난다 TextView의 좌측에는 아이콘이 들어간 ImageView가 있어야 한다.
[안드로이드] 안드로이드 스튜디오 Gradle build가 먹통일 때! Gradle sync failed: EventQueue.isDispatchThread()=false Toolkit.getEventQueue()=com.intellij.ide.Ide 갑자기 무슨 일일까, Git 브랜치를 변경한 후 제대로 빌드되지 않은 클래스들을 다시 빌드하기 위해 Invalidate Caches and Restart를 해주었는데 웬걸 위와 같은 오류와 함께 그래들 빌드가 전혀 되지 않았다. 위 상황을 해결하기 위해 갖은 노력을 해보았다. Invalidate Caches and restart 반복 : 실패 Android Studio 재시작 : 실패 Project 닫은 뒤 다시 열기 : 실패 아무 SDK 다운받아 설치해보기 : 실패 컴퓨터 재시작 : 실패 그리고 마침내 내가 찾은 솔루션은....
[안드로이드] 람다 Function을 파라미터로 가지는 로직의 Unit Testing! 자바에서 코틀린으로 넘어오면서 람다 식은 이제 부수적으로 쓴다기보단 항상 쓰게되는 부분 중에 하나가 되었다. 람다식을 단순히 이용할 때엔 간결하고 쉽게 사용이 가능하지만, 유닛 테스팅에 사용할 때, 특히 람다 Function을 파라미터로 포함한 function을 테스트해야 될 때는 이를 어떻게 Mock 해야 하는지, 가능은 한지에 대해서 머리를 싸매고 있었다. 결국에 개발이란 안 되는 건 없고, 방법을 찾지 못한 것이라는 말이 사실이었던 걸까, 방법은 있었다. mockito의 when 문을 이용해서 특정 function을 call 할때와, 이를 call 한 경우의 동작을 정의할 수 있는 것이었다. 방식은 아래와 같다. 우선 아래와 같은 클래스와 function을 예로 들어보겠다. class sampleC..
[안드로이드/Firebase] adb를 Android studio 터미널에 설정하기, adb 이용해 Firebase event 디버깅하기 Firebase analytics는 앱으로부터 입력받은 다양한 이벤트를 기반으로 사용자 분석을 돕는 유용한 툴이다. 다만 개발자가 지정한 이벤트가 의도한대로 올바르게 들어오는지에 대해서는 로컬에서 확인하기가 어려울 수 있다. 이를 위해 Firebase는 DebugView라는 기능을 제공한다. adb(Android Debug Bridge)를 이용해 원하는 디바이스를 Firebase Debug View에서 모니터링 할 수 있도록 설정하고 나면, 앱을 실행해 사용하는 중에 들어오는 이벤트를 실시간으로(물론 서버를 거치기 때문에 딜레이가 조금 있다.)확인이 가능하다. 그것도 아주 이쁘게. 그렇다면 우선 adb를 안드로이드 스튜디오에 설정하고, 다음 DebugView에서 기기를 보기 위한 명령어를 살펴보겠다. 1..
[안드로이드/UI-UX] Material BadgeDrawable 로 Badge를 원하는 뷰에 적용하기 Material Design의 BottomNavigationView를 사용해본 적이 있다면 매우 간편하게 Badge를 업데이트 할 수 있음을 경험한 적이 있을 것이다. 금번에 뱃지를 BottomNavigationView가 아닌 별도 View(이를테면 TextView 라던지)에 달아야 하는 경우가 생겼는데, 쓸만하고 예쁘다 싶은 라이브러리가 잘 없었기에, Material의 Badge가 떠오르는 건 어쩔 수가 없었다. 그런데 다행스럽게도 구글에서 Material Components 1.1.0-alpha09 버전부터 Badge를 지원하고 있다는 반가운 소식! Release 1.1.0-alpha09 · material-components/material-components-android Dependency Up..