PHpullh

KOTLIN · 비동기

채널 (Channel)

채널은 코루틴 간 통신을 위한 동시성 기본 요소입니다. 생산자-소비자 패턴을 안전하게 구현합니다.

비동기고급channelproducer-consumercoroutinesconcurrency

핵심 설명

채널은 코루틴 간 통신을 위한 동시성 기본 요소입니다. 생산자-소비자 패턴을 안전하게 구현합니다.

Kotlin code

import kotlinx.coroutines.*
import kotlinx.coroutines.channels.*

fun main() = runBlocking {
    // 기본 채널
    val channel = Channel<Int>(capacity = 5)

    // 생산자
    launch {
        for (i in 1..5) {
            println("전송: $i")
            channel.send(i)
            delay(100)
        }
        channel.close()
    }

    // 소비자
    for (value in channel) {
        println("수신: $value")
    }

    // produce 빌더
    val numbers = produce {
        var n = 1
        while (true) {
            send(n++)
            delay(200)
        }
    }

    // 5개만 수신
    repeat(5) {
        println("produce: ${numbers.receive()}")
    }
    numbers.cancel()

    println("완료")
}

학습 팁

Channel.CONFLATED는 최신 값만 유지하고, Channel.UNLIMITED는 무제한 버퍼링합니다. 용도에 맞는 버퍼 전략을 선택하세요.

주의할 점

채널을 close()하지 않으면 수신자의 for 루프가 영원히 대기합니다. 생산이 끝나면 반드시 닫으세요.

자주 묻는 질문

채널 (Channel)란 무엇인가요?

채널은 코루틴 간 통신을 위한 동시성 기본 요소입니다. 생산자-소비자 패턴을 안전하게 구현합니다.

채널 (Channel) 학습 시 주의할 점은 무엇인가요?

채널을 close() 하지 않으면 수신자의 for 루프가 영원히 대기합니다. 생산이 끝나면 반드시 닫으세요.