본문 바로가기

프로그래밍 언어/Kotlin

(10)
Flow 중간 연산자 흐름 제어1. debouncedebound 연산자는 데이터 발행 후 설정한 ms 내에 추가적인 데이터가 발행되는 경우, 기존의 데이터는 무시되고 새로 발행된 데이터를 기준으로 다시 ms를 측정하여 추가 데이터가 발행되지 않는 경우 해당 데이터를 수집한다.데이터 1번 발행 후 250ms 내에 데이터 2번 발행1번 데이터는 무시, 2번 데이터 발행 후 250ms 내에 3번 데이터 발행2번 데이터 또한 무시3번 데이터 발행 이후 250ms 내에 추가적인 데이터 발행이 없었으므로 3번 데이터 수집 2. samplesample 연산자는 설정 시간 간격 내에서 발행 데이터의 최신 값을 수집한다.변환 1. filterfilter 조건에 부합하는 데이터만 추출한다.val flowData: Flow = flow { ..
Flow Builder 1. flow내부에서 emit을 통해 동적 데이터를 발행할 수 있다.fun flowBuilder() = flow { var number = 0 while(true){ delay(1000) emit(number++) }}2. asFlowList와 같은 데이터 컬렉션을 Flow로 변환해준다.val list = listOf(1,2,3,4,5)val flow: Flow = list.asFlow() 3. flowOf정적인 Flow 데이터 흐름을 생성할 수 있다.val flow: Flow = flowOf(1,2,3,4,5)
Coroutine Flow Flow는 데이터 스트림의 일종으로 Coroutine 기반으로 데이터를 수집하는 기능이다. Producer: Flow Builder를 통해 데이터를 생산Intermediary: 생산 된 데이터를 중간에서 가공하는 역할 (선택)Consumer: 데이터가 넘어올 때마다 수집Flow의 특징1. Flow는 데이터 요청 시점부터 발행 시작fun main() { val scope = CoroutineScope(Dispatchers.IO) val flow = flow { var number = 0 while (true) { delay(1000L) emit(number++) } } scope.launch { ..
Channel 채널은 코루틴에서 지원하는 데이터 스트림 구조를 갖고 있는 일종의 자료구조이다.val cahnnel = Channel() 채널에서는 데이터를 전송 및 수신 할 수 있다.channel.send(data)val receiveData = channel.receive() 이렇게만 보면 Queue와 다른점을 찾기 어려워보이지만 채널의 큰 특징에는 일시정지(Suspend)가 있다. Suspendval channel = Channel()CoroutineScope(Dispatchers.IO).launch { for(i in 1..5){ channel.send(i) println("$i send!") } println("send Done!") channel.close()}r..
[Kotlin] Scope Function kotlin Scope Function에는 apply, also, with, run, let 총 5가지의 Function이 있다. 자기 자신의 객체를 반환하는 함수1. applyinline fun T.apply(block: T.() -> Unit): Tapply는 객체의 프로퍼티(속성)을 정의할 때 사용한다. val product: Product = Product().apply { // this id = 1 name = "컴퓨터" price = 1000000 category = Category.ELECTRONICS}data class Product( var id: Int = 0, var name: String = "", var price: Int = 0, va..
runCatching 예외 처리 runCatching은 Kotlin에서 제공하는 예외처리 함수로 성공, 실패에 따른 결과를 Result 객체로 변환하여 반환한다.inline fun runCatching(block: () -> R): Resultinline fun T.runCatching(block: T.() -> R): Result Result 생성runCatching 내부적으로도 try-catch문을 사용하여 작업의 성공, 실패 여부를 통해 Result 객체의 value 를 설정한다.@InlineOnly@SinceKotlin("1.3")public inline fun runCatching(block: () -> R): Result { return try { Result.success(block()) } c..
[Kotlin] 정렬 1. sort() 와 sorted()sort() 는 Mutable 상태에 사용하는 메서드이다.sorted()는 Immutable 상태에 사용한다.List는 Immutable 상태이므로 List에 sort()를 사용하면 오류가 발생한다.반대로 Mutable한 Array에 sorted를 사용하면 문제 없이 정렬이 수행된다. 다만, sort()는 기존에 있던 배열 또는 ArrayList에 정렬을 수행시켜주지만sorted()는 정렬된 배열 또는 리스트를 반환한다.val array = arrayOf(4, 3, 2, 1)array.sort()// array : [1, 2, 3, 4]val array2 = arrayOf(4, 3, 2, 1)val newArray2 = array2.sorted()// array2 : ..
[Kotlin] 배열과 리스트 복사 코딩을 하다보면 배열 또는 리스트를 복사해야할 일이 생긴다. 기존의 배열은 그대로 두고 새로운 배열을 만들어 데이터 변경을 해야하기 때문이다. 복사에는 두 가지 복사가 있다. 1. 얕은 복사 2. 깊은 복사 얕은 복사 얕은 복사란 주소값이 복사된 것을 말한다. 쉽게 말하자면 변수명만 다르고 내용물은 같은 경우이다. val list = Array(3, {0}) // [0, 0, 0] val list2 = list 위와 같은 경우 list2의 값을 변경하면 list도 같이 변한다. val list = Array(3, {0}) // [0, 0, 0] val list2 = list list2[0] = 1 println(list[0]) // 1 이는 ArrayList, List 모두 같다. 우리가 알고 싶은건 깊..
[Kotlin] 문자열 String 해당 포스팅에서는 문자열을 좀 더 세부적으로 알아본다. 문자열에는 다양한 메서드들이 있다. 그 중 자주 쓰이는 메서드들을 알아보도록 하며, 그 외의 메서드들은 아래 링크를 통해 Kotlin 공식 문서에서 참조 바랍니다. https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/ init var string = "초기화" 문자열 사이에 변수 값 1. $변수 2. ${변수} 1번으로 사용하실 경우, 다음 문자열과 띄어쓰기로 구분해야 한다. val data = "20" val string = "저는 ${data}살 입니다." println(string) println("저는 $data살 입니다.") //에러 : 변수명을 data살로 인식하기에 띄어쓰기를 해주어..
[Kotlin] 코틀린 기초 문법 1. val 과 var 및 자료형 // 변하지 않는 값 val a = 0 // 변하는 값 var b = 0 a = 10 오류 발생 b = 10 Kotlin에서는 Java와 마찬가지로 자료형을 선언해 주어야 한다. 형태는 다음과 같다. val a : 자료형 = 값 값을 선언해 주었다면 자료형은 생략해도 상관없다. val a : Int = 0 val b = 0 var string : String = "test" var string = "test 2. 입·출력 및 String템플릿 입력은 readLine(), 출력은 print(), println() 메서드를 사용한다. var name = readLine() print("안녕? 나는 $name 이야!") // 줄 바꿈 x println("안녕? 나는 $name..