본문 바로가기

코틀린

(7)
KotlinDl - 코틀린 버전의 딥러닝 GitHub - Kotlin/kotlindl: High-level Deep Learning Framework written in Kotlin and inspired by Keras High-level Deep Learning Framework written in Kotlin and inspired by Keras - GitHub - Kotlin/kotlindl: High-level Deep Learning Framework written in Kotlin and inspired by Keras github.com Kotlin에서 딥러닝을 위한 KotlinDl 라이브러리가 나왔다. 딥러닝은 할 줄 모르니 Quick start guide 나 따라해보자. 1. 라이브러리 적용 // for Kotlin depe..
이펙티브 코틀린 - 음..? 이펙티브 코틀린 책을 읽기 시작했는데, 읽다보니 사소하게 틀린 부분들이 눈에 계속 걸린다. 책에 에라토스테네의 체 알고리즘을 이용해서 변수 스코프에 대한 설명을 하는 부분이 있는데, 변수 스코프가 잘못지정된 케이스를 설명하면서 아래 코드를 사용하였다. val primes : Sequence = sequence { var numbers = generateSequence(2) { it + 1 } var prime : Int while (true) { prime = numbers.first() yield(prime) numbers = numbers.drop(1) .filter { it % prime != 0 } } } fun main() { println(primes.take(10).toList()) //[2..
Kotlin Channel - 코루틴간 데이터 통신 Channel 이란? 앞에서 본 Flow가 단일방향으로 데이터를 던지고 받는 형식이라면 Channel 은 여러 방향에서 데이터를 던지고 받는 형식으로 코루틴 끼리의 데이터를 전달하기 위한 위한 친구이다. 구조는 BlockingQueue 와 비슷하며, 동일하게 ThreadSafe 한 형태의 구조를 가지고 있다. 기본적인 사용법 기본적인 사용법은 간단하다. val channel = Channel() CoroutineScope(Dispatchers.Default).launch { channel.send(it) channel.receive() } channel.close() Channel() 함수를 통해 생성할 수 있으며, 데이터를 스트림에 밀어 넣을 땐 send, 스트림에서 받을 땐 receive 를 사용하면..
Kotlin Flow #4 - onXXX 함수와 예외처리 이번에는 알아볼 것은 플로우에서 시작, 완료, 에러 등의 상태 처리 등을 하는 함수들이다. 시작할 때 flowOf(1, 2, "String", 3).onStart { emit("Start1!!!") }.onStart { emit("Start2!!!") }.collect { println(it) } result : Start1!!! Start2!!! 1 2 String 3 onStart 함수는 Flow 가 실행을 시작할 때 특정 데이터를 방출할 수 있도록 지원한다. 선언 위치는 사용전이면 상관없으며 여러 번 사용하면 순서대로 전부 실행된다. 비어있을 때 emptyFlow().onEmpty { emit("is Not Empty") }.collect { println(it) } result : is Not E..
Kotlin Flow #3 - Zip And Combine Rx에서 zip이나 combineLatest 등으로 여러 응답을 결합하여 사용하듯이, 코틀린에서도 여러 개의 Flow를 결합하여 사용할 수 있는 함수를 제공한다. Flow 함께 사용하기 1. Zip val nums = (1 .. 3).asFlow() val strs = flowOf("one", "two", "three", "four").onEach { delay(1000) println("str") } nums.zip(strs) { a, b -> "$a -> $b" }.collect{ delay(1000) println(it) } result : 1 -> one 2 -> two 3 -> three 첫 번째 방법으로 zip 을 이용할 수 있다. zip 은 결합된 모든 Flow 가 데이터를 방출하기를 기다리..
Kotlin Flow #2 - 연산자들 Flow에서 사용할 수 있는 다양한 연산자들을 정리한다. 아래 나오는 연산자들은 Flow 나 데이터의 조작을 위한 것으로 따로 실행을 시키지 않는다면 아무런 동작도 시작하지 않는다. ( collect, launchIn 등등 ) 개수 제한 연산자 (1..3).asFlow().take(2).collect{ println("$it") } take 연산자는 특정 개수까지만 데이터를 받고 싶을 때 사용하는 연산자이다. 지정한 개수까지만 방출한 후에 남은 데이터에 상관없이 Flow는 자동으로 취소된다. 숫자를 마이너스로 넣을 경우 에러가 발생한다. 버퍼 연산자 private fun getNumbers(): Flow = flow { for (i in 1..5) { delay(200) emit(i) } }.flowOn..
Kotlin Flow #1 - 기본 사용법 Flow 란? 코틀린 플로우는 suspend function을 보완하기 위해 나온 친구이다. 비동기 동작의 결과로 suspend function 이 하나의 결과물 던진다면, 플로우를 이용하여 여러 개의 결과를 원하는 형식으로 던질 수 있다. 특징 비동기이며 코루틴에서만 동작 가능한 것은 suspend function 과 동일하다. 다른 점은 함수 앞에 suspend 를 붙이지 않아도 된다. cold stream ( kotlin의 sequence )으로 동작하며 hot stream 은 지원하지 않는다. 그렇기에 데이터는 요청할 때마다 처음부터 새로 발행되며, 요청 전에는 선언만 있을 뿐 아무런 동작도 하지 않는다. 직접 취소할 수 있는 함수는 따로 제공하지 않는다. Flow 생성 우선 Flow를 생성하는 ..