[kotlin] Channel을 사용하여 데이터 전달하기
Channel은 Kotlin의 코루틴을 사용하여 데이터를 전달하고 통신하는 데 사용되는 특별한 유형의 코루틴 기반 컴퓨테이션과 유사한 것으로 볼 수 있습니다.
Channel이란 무엇인가?
Channel은 통신을 위한 구조물이며, 보낸 쪽과 받는 쪽이 동시에 또는 비동기적으로 데이터를 주고 받을 수 있게 해줍니다. 코루틴 사이에서 데이터를 안전하게 전달하고 동기화하는 데 사용됩니다.
Channel 생성하기
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
fun main() = runBlocking {
val channel = Channel<Int>()
val job = launch {
for (x in 1..5) {
channel.send(x * x)
}
channel.close()
}
repeat(5) {
println(channel.receive())
}
job.join()
}
위 코드에서는 Channel
을 사용하여 Int
타입의 데이터를 보내고 받는 예제가 있습니다. launch
코루틴 블록 내에서 channel.send()
를 사용하여 데이터를 보내고, receive()
를 사용하여 데이터를 받습니다.
Channel의 종류
Kotlin에는 다양한 종류의 Channel이 있습니다.
- ArrayChannel: 고정된 크기의 큐로, 들어오는 요소가 모두 저장될 때까지 전송을 차단합니다.
- ConflatedBroadcastChannel: 가장 최근에 발행된 요소만을 보여주는 채널입니다.
- Mutex: 락을 이용해서 동시에 한 코루틴만이 데이터를 사용할 수 있게 해줍니다.
요약
Channel을 사용하면 코루틴 사이에서 안전하게 데이터를 주고 받을 수 있습니다. 이를 통해 동기화와 효율적인 통신이 가능하며, 코루틴 간의 효율적인 데이터 전달이 가능해집니다.
이러한 장점으로 Channel은 Kotlin에서 동시성 및 병렬 처리 작업을 다루는 데 유용한 도구로 활용됩니다.
참고 문헌: Kotlin Coroutines Guide - Channels