kotlin 20

LiveData를 버리고 StateFlow를 써야할까요?

Flow 비동기식으로 계산할 수 있는 데이터 스트림. Flow는 값 시퀀스를 생성하는 Iterator와 매우 비슷하지만 정지함수를 사용하여 값을 비동기적으로 생성하고 사용한다. Python의 generator와 비슷하게 이해하면 될 듯. 생산자: 스트림에 추가되는 데이터를 생산. 코루틴 덕분에 비동기적으로 생산도 가능. (Remote Datasource) 중개자(*optional): 스트림에 내보내는 각각의 값이나 스트림 자체를 수정할 수 있다. 소비자: 스트림의 값을 사용한다. 생산자는 저장소, 소비자는 UI 인터페이스라고 받아들일 수 있다. 하지만 UI 레이어가 사용자 입력이벤트의 생산자 역시 될 수 있다. StateFlow의 특징 항상 값을 가지고 있다. 단 하나의 값만을 가진다. 여러 옵저버를 가..

[안드로이드] V3 구글 인앱 결제 쉽게 구현하기 2021 - 설정편

Quick Links 강의 1 편 - 설정 강의 2편 - 인앱상품 강의 3편 - 구독상품 Github 예제 코드 최근에 Google Play로 부터 아래와 같은 내용의 메일을 받으신 분들이 있을겁니다. 옛날 버전의 결제 모듈을 사용하고 계시다면, 이번 기회에 저와 함께 따라하면서 바꿔보세요! 앱이 이전 버전의 Google Play 결제를 사용하는것으로 확인되었습니다. 2021년 11월 1일까지 모든 앱 업데이트가 결제 라이브러리 버전 3 이상 을 사용해야 합니다. 이 날짜 이전에 결제 라이브러리 버전 3로 업데이트하시기 바랍니다. 이번 편은 "설정편"입니다. Google Play에 앱을 등록하고, 결제 테스트가 가능하도록 설정하는 과정이 여기에 포함됩니다. APK 업로드 이전, APK 업로드 이후 부분으..

[Kotlin/Java] 생년월일 기준으로 현재 만 나이 계산하기

입력한 생년월일을 기준으로 만 나이를 계산하는 코드다. calculateAge(date) >= 14 일경우, 만 14세 이상 조건을 만족하게 된다. /** * 생년월일을 기준으로 현재 나이 계산 * @param unix unixtimestamp */ fun calculateAge(date: Date?): Int { val birthCalendar = Calendar.getInstance() birthCalendar.time = date ?: Date() val current = Calendar.getInstance() val currentYear = current[Calendar.YEAR] val currentMonth = current[Calendar.MONTH] val currentDay = curr..

[Kotlin/Java] Youtube URL인지 체크, Youtube Video ID 가져오기

대세는 유튜브라~ 안드로이드 앱에서 어떤 문자열이 유튜브 URL인지 체크해야할 경우가 잦다. 유튜브는 PC에서 볼 수 있는 youtube.com과 모바일이나 공유시 볼 수 있는 youtu.be 이렇게 생긴 URL이있는데 인터넷을 긁어긁어 모든 Youtube 관련 URL에 대응할 수 있는 완벽한 정규식을 찾아냈다. 하핫 유용하게 사용하세요. object YoutubeUtil { // 유튜브 섬네일 가져옴 fun getThumbnail(url: String): String { val vId = getVideoId(url) return "https://img.youtube.com/vi/$vId/hqdefault.jpg" } fun getVideoId(url: String?): String { var vId =..

[Kotlin/Java] 닉네임 정규식, 닉네임 유효성 검사하기

조건: 숫자, 영어, 한국어와 언더스코어, 공백을 허용하며 최소 2자 이상의 닉네임 만약에 공백을 하용하지 않을 경우 정규식을 다음과 같이 변경 ^[가-힣ㄱ-ㅎa-zA-Z0-9._-]{2,}\$ fun isValidNickname(nickname: String?): Boolean { val trimmedNickname = nickname?.trim().toString() val exp = Regex("^[가-힣ㄱ-ㅎa-zA-Z0-9._ -]{2,}\$") return !trimmedNickname.isNullOrEmpty() && exp.matches(trimmedNickname) }

[Kotlin/Java] 숫자를 K, M, B 단위로 줄여서 표시하기

오늘부터 꾸준히... 유용한 함수가 있으면 올릴려고 한다. 마음 먹는게 중요한 거니까~ 아래 함수를 이용하면 10,000을 10K로 표시할 수 있다. fun formatNumber(value: Long): String { return when { value >= 1E9 -> "${(value.toFloat() / 1E9).toInt()}B" value >= 1E6 -> "${(value.toFloat() / 1E6).toInt()}M" value >= 1E3 -> "${(value.toFloat() / 1E3).toInt()}K" else -> NumberFormat.getInstance().format(value) } }

[Android] Preferences DataStore 사용법과 개념

원문 https://medium.com/@shalutd007/welcome-datastore-good-bye-sharedpreferences-4bf68e70efdbhttps://developer.android.com/topic/libraries/architecture/datastore원문을 읽으면서 제가 공부하려고 번/의역한 것입니다. Jetpack DataStoreDataStore는 Key-Value쌍 또는 Protocol buffers를 이용한 Typed Object형태로 데이터를 저장할 수 있게 해주는 솔루션이다.DataStre는 Kotlin의 Coroutine과 Flow를 사용해서 데이터를 비동기적이고, 일관적으로 저장할 수 있다. 또한 SharedPreference로 부터의 migration도 ..

[Kotlin] Channel이란?

원문: https://proandroiddev.com/kotlin-coroutines-channels-csp-android-db441400965f원문을 읽으면서 제가 이해하기 위해 번역한 것입니다.개념만 남기고 예제는 거의 뺐으니 예제를 보시려면 여기로~ Channels Channel은 2개의 Coroutine 사이를 연결한 파이프라고 생각하면 된다.이 파이프는 두 Coroutine 사이에서 정보를 전송할 수 있도록 한다.하나의 Coroutine은 파이프를 통해서 정보를 보낼 수 있고, 다른 하나의 Coroutine은 정보를 받기위해 기다린다. 채널이라는 말을 일상생활에서는 TV에서 제일 많이 쓰는데..채널을 통해서 우리는 방송국에서 쏴주는 방송을 본다. (일방적 커뮤니케이션)사진에서 1번 Corouti..

[안드로이드] Kotlin Flow를 이용한 순간검색 (Instant Search)을 구현해보자

내가 만든 앱에서 순간검색을 지원하고 싶었던 순간이 많았는데...원래 되는대로 검색 요청 날리다가 이번에 새로운 방법을 알게되서 적어본다.Kotlin에서 Flow가 뭘까...공부하다가 나온 예제에서 발견했다.완성하면 이렇게된다. 전체 프로젝트 Githubhttps://github.com/lx5475/Kotlin-Flow-Instant-Search 간단하게 치킨집 목록을 검색하는 걸로 시작해보도록하겠다. 12345678910111213dependencies { // RecyclerView implementation "androidx.recyclerview:recyclerview:1.1.0" // ViewModel def lifecycle_version = "2.2.0" implementation "andr..