Kotlin

[코루틴] 채널에 대한 모든것 1

FortunaMiracle 2025. 5. 28. 13:00
728x90

안녕하세요~ 

코루틴의 채널이란, 파이프와 같이 코루틴 간의 데이터를 공유하는 것입니다.

파이프란,  프로세스 간 통신을 할 때 사용하는 도구입니다. 내부적인 동작은 파일에 전달할 메시지를 저장한 다음, 전달받을 프로세스는 그 파일을 읽고 사용하는 것입니다. 

파이프는 producer , consumer 모델에서 자주 언급되는 통신 도구입니다.  큰 특징은 단방향성입니다.

이러한 파이프의 동작은 코루틴의 채널과 굉장히 유사합니다.

 

 

다음은 간단한 채널 사용 예시 입니다. 

package org.exampleimport kotlinx.coroutines.*
import kotlinx.coroutines.channels.*

fun main() = runBlocking {      
	val channel = Channel<Int>()    
    launch { // 새로운 코루틴을 시작합니다.        
    	for( x in 1.. 10){            
        	channel.send(x)        
        }    
    }   
    
    repeat(10){        
    println("received : ${channel.receive()}")    
    }
}

 

 

채널의 정상 종료 코드 입니다. 

import kotlinx.coroutines.*
import kotlinx.coroutines.channels.*
fun main() = runBlocking<Unit> {    
	val channel = Channel<Int>()    
    	launch {        
        	for (x in 1..10) {            
            	channel.send(x)        
            }        
            
            channel.close()    
        }    
    for (x in channel) {        
    	println(x)    
    }    
    
    println("코루틴 완료")
}

 

앞선 코드 2가지는 채널의 정상적인 종료 예시 2가지입니다. 

1. 채널이 보낸만큼 reapeat를 활용해 받습니다.

2. close() 함수를 보낸 코루틴 스코프에서 호출합니다.

 

정상적으로 코딩이 되지 않는다면, 프로그램이 종료되지 않거나, 오류 메시지를 마주하게 됩니다. 

 

예를 들어 잘못된 코딩은 다음과 같습니다.

fun main() = runBlocking<Unit> {    
	val channel = Channel<Int>()    
    launch {        
    	for (x in 1..10) {            
        	channel.send(x)        
        }        
        
        repeat(10) {            
        	println(channel.receive())        
        }        
        
        println("채널 통신 완료")    
    }
}

 

 

이 코드는 main 함수가 정상적으로 종료가 안되고 계속 대기하여 프로그램이 오작동합니다.

 

 

 

[환경]

IDE :  Android Studio Flamingo | Android Studio 2024.3.1 Patch (Help메뉴 > About 항목 클릭)

언어 : Kotlin 2.0.21 ( 안드로이드 프로젝트 경로 > gradle > lib.versions.toml 


[reference]

코루틴 핸즈온

https://kotlinlang.org/docs/coroutines-and-channels.html#generate-a-github-developer-token

[도움]

 

1. 응원 댓글은 글 쓰는데 힘이 됩니다.

2. 공감도 글 쓰는데 힘이 됩니다. 

3. 광고 한번 클릭해 주시면 힘은 두 배가 됩니다. 

4. 혹시라도 부족한 부분이 있다면 덧글로 남겨주세요. 남기시면, 더 나은 글을 쓸 재료가 됩니다.

 

 

728x90