안드로이드의 permission은 초기에는 Manifest에 추가만 해주면 해결 됐지만, 보안이 강화되면서 API 23부터 사진을 찍거나 위치정보를 이용하는등의 경우에 런타임으로 요청을 해서 사용자 확인을 받아야 한다. Runtime Permissions는 dangerous permissions라고도 하며, 시스템이나 다른앱에게 영향을 줄 수 있는 영역에 접근할 때 필요하다. runtime 으로 permission을 요청하면 사용자에게 다음과 같은 대화상자가 표시된다. 사용자는 허용/거부를 선택할 수 있고 그에 따라…
[카테고리:] 코틀린
Kotlin 관련 메모
Android: onActivityResult()의 대안 RegisterForActivityResult()
외부 Activity를 실행할 때, 이전 방식은 startActivityForResult()를 이용하여 Intent를 날리고 onActivityResult() callback으로 결과를 받아오는 방식이었다. 새롭게 권장하는 방식은 AndroidX 라이브러리의 Activity/Fragment 를 이용하여 RegisterForActivityResult()를 사용하는 방식이다. 정확한 장점을 설명하기에 아직 내 이해도가 부족하지만, 기존 방식이 좀 무식하긴 했다. 인텐트로 외부 액티비티를 실행하고, 뭘 실행했든지 onActivityResult() 하나의 콜백에서 request code로 분류하며 전부 처리해야 했다. 또한, 인텐트…
Multithread Singleton 구현에서의 Double-checked locking pattern
안드로이드 Room에서 Database 클래스의 Singleton 구현에 조금 의아해 보이는 코드가 있었다. Database class 코드를 다시보면 아래와 같은데, singleton 구현부분에서 getInstance() 함수만 떼어서 보자. 코드를 보면, instance의 null 여부를 두 번 체크하고 있다. 생각없이 보면 이상할 수 있는데, 멀티 쓰레드 동기화시 꼭 필요한 부분이며 Double-checked locking 이라고 부르는 디자인 패턴이다. 링크의 위키페이지를 따라가면 관련 설명이 있다….
Android : Paging Library
네트워크에서 데이터를 읽어오든지, DB에 저장된걸 가져오든지 데이터가 매우 많아지면 한번에 읽어올 때 문제가 생기게된다. 그렇다고 화면에 보이는 만큼만 매번 읽어오게되면, 스크롤등을 이용하여 데이터를 살펴볼 때, 렉이 생길 것이다. 이를 해결하기위해 사용자 입력에 충분히 반응할만큼 여유있는 데이터를 읽어오고, 사용자가 추가적으로 데이터를 살펴볼 때, 필요한 만큼씩 미리 읽어오는 기법이 오래전부터 사용되어 왔다. 이걸 paging 기법이라 하는데, 꼭…
Kotlin : Sealed class vs Enum
다수의 코드에서 Enum 역할을 하는 곳에 Sealed class를 사용하는걸 보게 됐고, 한 번 정리하고 넘어갈 필요성을 느꼈다. 간단하게 얘기하자면, Sealed class는 enum class처럼 동일하게 사용가능하면서 보다 유연하고 확장성을 가진다. Enum class 먼저 간단히 Enum class를 살펴보자. enum은 같은 카테고리의 상수들을 나열한 것이다. Kotlin 공식사이트의 예제를 가져오면 다음과 같이 사용한다. 기존 언어들에서도 사용하는 가장 간단한 형태이다….