Android/Kotlin
[Kotlin] Flow<List<T>> 에서 List<T>로 변환하기.
간혹 코루틴에서 Flow를 사용하여 데이터의 흐름을 제어하는 경우에 Flow 내부에 List를 사용하는 경우가 종종 있다. 이러한 상황에서 Flow 내부 List를 얻기 위해서는 flat-mapping 을 사용하여 얻을 수 있다. suspend fun Flow.flattenToList() = flatMapConcat { it.asFlow() }.toList() suspend fun test() { val flowOfLists: Flow = flowOf(listOf(1, 2), listOf(3, 4)) val flatList: List = flowOfLists.flattenToList() println(flatList) }
[Kotlin/Plugin] Json으로 data class 추출하기
개발을 하다보면 Json 파일 정보를 이용하여 매핑할 수 있는 클래스를 만드는 일이 간혹 있습니다. 간단한 Json 파일 형태라면 수작업으로 빠르게 완성할 수 있겠지만 Json 파일 포맷이 매우 큰 경우, 그리고 복잡한 구조인 경우에는 클래스로 정의하기 귀찮고, 복잡하며, 매우 하기 싫은 일 일수 있습니다. 이런 귀찮음과 불편함은 누군가 해결해주었고, 그 해결법중 안드로이드 스튜디오 플러그인에서 설치하여 간단하게 사용하는 방법을 공유드리려 합니다. 추천하는 플러그인은 JsonToKotlinClass 입니다. https://github.com/wuseal/JsonToKotlinClass GitHub - wuseal/JsonToKotlinClass: 🚀 Plugin for Android Studio And ..
[Kotlin] Object
객체선언 (Object declarions) 싱글톤 패턴은 다양한 상황에서 사용이 된다. 코틀린은 이런 싱글톤을 쉽게 사용할 수 있도록 객체선언을 이용하여 싱글톤 객체를 만들 수 있도록 지원한다. 위 처럼 class대신 object 키워드를 이용하여 객체선언이 가능하다. 이러한 선언은 싱글톤을 생성할 수 있다. 위에서 생성한 Application 이란 이름의 객체는 아래와 같이 접근이 가능하다. Application.start()객체에는 변수, 프로퍼티, 멤버함수 등을 포함시킬 수 있고, 초기화 블록도 작성할 수 있으나, init, constructor를 작성할 수는 없다. 객체의 생성은 처음 접근할 때 초기화되며, 스레드-세이프가 보장된다. 컴파일러는 여러 스레드에서 싱글톤 객체에 접근하더라도 오직 하..
[Kotlin] @Volatile 키워드란?
아래 코드는 Android developer 페이지의 Codelabs에서 제공하는 예시 코드이다. 해당 코드를 보면 Singleton 구현 시 변수에 @Volatile Annotation을 붙히는 것을 볼 수 있다. 이게 어떤의미 일까? // Annotates class to be a Room Database with a table (entity) of the Word class @Database(entities = arrayOf(Word::class), version = 1, exportSchema = false) public abstract class WordRoomDatabase : RoomDatabase() { abstract fun wordDao(): WordDao companion object..
[Kotlin] Scope Function (작성중)
Kotlin의 Scope Funtion에 대해 가끔 헷갈리는 경우가 있어 정리하고 합니다. 영역 함수 (Scope Function) 코틀린 표준 라이브러리는 객체의 컨텍스트 내에서 어떤 식, 코드 블록을 실행할 수 있는 몇 가지 함수를 제공합니다. 제공된 람다 식을 사용하여 객체에서 이러한 함수를 호출하면 임시 범위를 형성합니다. 이러한 함수를 스코프 함수라고 합니다. 영역 함수의 기본적인 역할은 함수의 인자로 전달된 람다를 간단하게 실행해주는 것입니다. Kotlin에서 제공하는 영역함수은 5가지를 표준으로 제공하고 있습니다. run let with apply also 위 표준 영역함수을 정리해보고 사용하는 방법을 간단히 정리하려 합니다. 참고로 모든 영역함수은 Inline 함수이므로 런타임에 부가적인 ..
[Kotlin] Coroutine Builder 간략 정리
환경 kotlin coroutine version : 1.6.1 Coroutine Builder 란? Coroutine을 실행할 때 사용하는 여러 가지 함수를 뜻한다. 예를 들어 launch(), async(), runBlocking() 등이 있다. launch() public fun CoroutineScope.launch( context: CoroutineContext = EmptyCoroutineContext, start: CoroutineStart = CoroutineStart.DEFAULT, block: suspend CoroutineScope.() -> Unit ): Job { val newContext = newCoroutineContext(context) val coroutine = if (..