Dagger2 사용 시, XXX is defined multiple times 에러가 발생한다면

Dagger2는 관련된 MembersInjector 및 Factory 패키지를 올바른 패키지 경로에 생성하게 된다. 다음 그림은 안드로이드 프로젝트의 모듈간 의존성을 보여준다. 만약 안드로이드 프로젝트가 멀티 모듈로 구성되어 있고 모듈별로 Dagger2 어노테이션 프로세싱이 수행된다면, 모듈별로 각자 생성된 클래스를 갖게 되므로 중복된 클래스를 갖게 된다. 이렇게 되면 debug 빌드시에는 이를  괜찮은 듯 보이나, 릴리즈 빌드시 더보기…

글쓴이 Charlezz,

Paging 3 라이브러리 완벽 가이드 (공식 문서 번역)

개요 페이징 라이브러리를 사용하면 로컬 저장소 또는 네트워크를 통해 큰 데이터를 잘게 쪼개어 로드하고 표시 할 수 있다. 이 방식을 사용하면 앱에서 네트워크 대역폭과 시스템 리소스를 더 효율적으로 사용할 수 있다. Paging3 라이브러리 컴포넌트 Android 앱 아키텍처에 맞게 설계되고 다른 Jetpack 구성 요소와 깔끔하게 통합되며 Kotlin 우선 지원을 제공한다. 장점 더보기…

글쓴이 Charlezz,

답변받기 쉬운 질문 작성하기

답변받기 쉬운 질문 작성하기 찰스의 안드로이드 오픈채팅방은 안드로이드 앱 개발에 대해 자유롭게 질문하고 토론하는 공간입니다. 먼저, 현재 오픈채팅방에 고수분들이 많이 계시고, 여러 질문에 대해 답변을 잘 해주셔서 감사하다는 말씀드리고 싶습니다. 그런데, 아마 누군가는 이렇게 생각하실지도 모릅니다. “제가 한 질문에는 답변 안 해주시던데요?” 다들 현업에 종사하시고 있고, 틈틈이 바쁘신 시간 쪼개서 더보기…

글쓴이 Charlezz,

로딩속도가 가장 빠른 안드로이드 이미지 피커 라이브러리 Pickle!!

Let’s Pickle 로딩속도에 초점을 맞춘 안드로이드 이미지 피커 라이브러리를 배포했습니다. Instagram 및 Facebook과 같은 타사 앱보다 월등히 빠른 로딩속도를 보여줍니다. 퍼포먼스 비교 영상 참고 (소리주의!) 설정 앱 모듈의 build.gradle에 다음 내용을 추가합니다. 최신버전 : dependencies { implementation “com.charlezz:pickle:최신버전” } 특징  Paging3 기반으로 수십만장의 이미지 및 비디오를 가진 디바이스에서도 일정한 로딩 더보기…

빌드는 성공! 하지만 APK 설치는 실패! APK만 다시 설치하고 싶다면?

APK 재설치 스크립트 빌드 된 APK만 재설치 하고 싶을 때가 있다. 예를들어 Android Studio로 빌드(run)도중 단말과의 연결이 끊어지거나 APK의 업스트리밍이 실패하는 경우다. 물론 run을 다시 눌러 빌드를 새로 시작하고 APK를 설치할 수도 있지만, 경우에 따라 빌드에 최소 수분이상의 시간이 소요될 수 있기 때문에 빌드 된 APK를 재설치하는편이 낫다. 일반적으로 APK설치를 위해 adb 더보기…

동시성 프로그래밍에서 발생하는 경쟁 상태, 교착 상태에 대해 알아보자

동시성 프로그래밍(Concurrent Programming) 동시성 프로그래밍은 여러개의 계산들을 연속적으로 하는 것이 아닌 병행 처리하는 프로그램을 말한다. 이러한 동시성 코드를 제대로 작성하는 것은 쉽지 않다. 하지만 동시성 코드 작성을 통해 성능 향상을 기대할 수 있는 경우가 많기 때문에 현대 프로그래밍에서는 필수적인 요소다. 동시성 코드를 작성할 때 발생할 수 있는 공통된 문제점들에 대해서 더보기…

동시성과 병렬성의 차이

동시성(Concurrency)과 병렬성(Parallelism)은 다르다 동시성 동시성은 적어도 두 개의 스레드가 진행 중일 때 존재하는 조건이며, 가상 병렬 처리의 한 형태로 시간 분할(time-slicing)을 포함한다. 우리가 흔히 ‘동시’라고 이야기 하지만 컴퓨터(코어)는 한번에 하나의 명령어만 처리할 수 있다. 즉, 두개 이상의 알고리즘이 하나의 코어내에서 스레드간에 빠르게 교차되면서 실행되기 때문에 ‘동시’라고 느끼는 것이다. 위의 그림은 더보기…

코루틴이 경량 스레드인 이유 (Light-weight thread)

Why Coroutine is light-weight thread 코틀린 공식 문서에서는 코루틴을 경량 스레드(light-weight thread)라고 표현하고 있는데, 그 이유를 알아보자. 코루틴은 스레드에서 실행된다. 이것은 대원칙이다. 코루틴이 단독으로 또는 다른 수단에 의해 실행될 수 없다는 것을 명심하자. 그리고 여러개의 코루틴을 하나의 스레드를 지정하여 실행할 수 있지만 동시에 실행 하는 것은 불가능하고, 한번에 하나의 명령어만 더보기…

Stackful 과 Stackless 코루틴의 차이

Stackful Coroutines vs Stackless Coroutines Stackful Coroutines 먼저 스택풀 코루틴(Stackful Coroutine)은 함수 호출시에 사용되는 분리된 스택을 가지고 있다. 코루틴이 어떻게 동작하는지 정확하게 이해하기 위해서 로우레벨 관점에서 간단히 함수 프레임과 함수 호출에 대해서 살펴볼 것이다. 하지만 먼저 스택풀 코루틴의 특성에 대해서 알아보자. 스택풀 코루틴은 자신만의 스택을 가지고 있다. 스택풀 코루틴의 수명은 더보기…