[2022 찰스의 안드로이드 컨퍼런스] 후기

발표용 환경을 셋팅하고 있습니다. 준비한 리모컨이 잘 작동하지 않아 적잖이 당황했지만.. 다행히 연사자 중 한분이 여분의 리모컨을 가지고 있어서 해결할 수 있었습니다. 연사분들도 아침 일찍 오셔서 리허설을 준비하는 모습입니다. 행사장 입구에 놓여진 표지판. 폰트는 종신체, 힘이 느껴지는 폰트입니다. (written by 김종신) 체크인을 도와주신 연사자 동진님, 발표하실 스크립트를 수정하시는 중입니다. 싸구려 더보기…

안드로이드 프로젝트에서 최신 버전의 라이브러리 확인하기

이 포스팅은 Gradle 프로젝트에서 라이브러리 버전을 관리하는 방법을 공유합니다. Lint의 최신 라이브러리 검사 비활성화 Lint의 이슈중 NewerVersionAvailable 이라는 것을 활성화 하면, 원격 리파지토리에 접속하여 특정 라이브러리의 버전을 매번 검사하게 되므로 유용할 수 있지만 안드로이드 스튜디오가 느려질 수 있다. 그래서 난 보통 이 옵션은 비활성화 한다. 최신 라이브러리 검사 하기 NewerVersionAvailable 더보기…

Composable, 너의 위치를 알려죠! (OnGloballyPositioned)

컴포저블의 포지션은 어떻게 구할 수 있나 Android View로 애플리케이션 UI를 구현할 때는 root 에서 하위에 있는 view의 포지션을 구할 수 있었다. 하지만 컴포즈로 UI를 구현시에는 View는 ComposeView 하나만 존재하고, 캔버스에 필요한 Element들을 그리는 방식이다.  위의 이미지와 같이 특정 버튼(컴포저블) 위치에 맞춰 어떠한 팝업을 띄운다고 가정할 때 어떻게 포지션을 구할 수 더보기…

[안드로이드로 배우는 OpenCV] matchShape로 객체 검출하기

이전 포스팅에서 모멘트에 대해서 알아보았고, 그중 Hu의 7개 불변 모멘트가 영상의 크기, 회전, 이동, 대칭 변환에 불변하다는 것을 알 수 있었다. 이러한 부분을 참고하여 주어진 이미지에서 원하는 객체를 찾아보도록 하자. OpenCV에서는 원하는 객체를 찾기위해 주어진 두 모양을 비교하는 matchShapes()라는 함수를 제공한다. matchShape() matchShape 함수는 주어진 두개의 윤곽선(Contour)을 비교하는 함수다. 내부적으로 더보기…

생명주기에 맞춰 안전하게 코루틴 사용하기

생명주기에 안전한 코루틴 lifecycle 컴포넌트를 사용한다면, 생명주기를 인식하는 코루틴을 만들 수 있다. LifecycleOwner로써 취급되는 AppCompatActivity(ComponentActivity) 또는 Fragment를 일반적으로 사용할 때 lifecycle 컴포넌트를 사용하게 되는데 이때 lifecycleScope를 사용할 수 있다. 일반적은 코루틴 스코프와 마찬가지로 launch를 async와 같은 함수 호출을 통해 suspendable 한 작업을 할 수 있다. lifecycleScope.launch { // 코루틴 작업 더보기…

콜드 스트림을 핫 스트림으로 변경하기 (shareIn, stateIn)

MutableSharedFlow를 사용하여 값을 발행하고 다른 한편에서는 이를 수집할 수 있는 수단을 제공한다. 그러나 다른 코드에 있는 콜드 플로우를 가져와서 이 업스트림을 수집하고 SharedFlow로 내보낼 수 있는 편리한 방법도 있다. 바로 ShareIn 연산자를 사용하는 것이다. ShareIn 연산자 shareIn 연산자는 다음과 같이 생겼다. 이 연산자를 사용하면, Flow(콜드스트림)를 주어진 코루틴 스코프(scope) 내에서 시작되는 더보기…

[이펙티브 코틀린 요약] 효율적인 컬렉션 처리

컬렉션은 중요한 개념이며, 안드로이드에서도 일반적으로 RecyclerView, LazyColumn 등을 사용할 때 컬렉션을 사용하게 된다. 현대적인 프로그래밍 언어는 대부분 컬렉션 처리를 굉장히 잘 지원해주며, 코틀린도 강력한 컬렉션 처리를 지원한다. 컬렉션을 처리하는 부분의 최적화는 성능에 큰 영향을 미치므로 굉장히 중요하다. 이번 포스팅에서는 효율적인 컬렉션 처리를 하는 방법에 대해서 알아본다. 하나 이상의 처리단계를 가진 더보기…

오토박싱 및 언박싱 그리고 JVM내 캐시에 대하여

Autoboxing vs Unboxing 오토박싱(Autoboxing)은 Java 컴파일러가 원시 타입(Primitive types)과 해당 객체 래퍼 클래스 간에 수행하는 자동 변환을 말한다. 예를 들어 int를 Integer로, double을 Double로 변환하는 식이다. 변환이 다른 방향으로 진행되는 경우 이를 언박싱(unboxing)이라고 한다. 다음 간단한 오토박싱 예제를 살펴보자. ‘a’의 타입은 char인데 Character에 대입했다. 이렇게 해도 호환이 되며 이것이 오토박싱이다. 더보기…