Hello, Android!

채널 본문

Kotlin

채널

lwndnjs93 2020. 9. 21. 17:22

채널은 자료를 서로 주고받기 위해 약속된 통로 역할을 한다

코루틴의 채널은 넌블로킹 전송 개념으로 사용된다

채널 구현시에는 SendChannel과 ReceiveChannel 인터페이스를 사용하여 

값들의 스트립을 전송하며, 지연함수 send(), receive()를 사용한다

send()함수에서 값을 보내면 receive()함수를 통해 값을 받을수 있다

코루틴에서 채널에 send함수를 이용하여 10개의 값을 보내고

10개의 값을 채널에서 수신하여 출력한다

 

채널은 더이상 전달하는 데이터가 없으면 close()를 사용하여 채널을 닫을수 있다

 

- produce

produce는 채널이 있는 코루틴으로 생산자(데이터를 만드는쪽)의 코드를 쉽게 구현할수 있다

생산자 produce()로 데이터를 만들고 데이터를 사용하는 소비자는 consumeEach()를 확장하여

for문 대신 사용이 가능하다

produce는 데이터를 만들어 ReceiveChannel을 반환하고

main에서는 consumeEach를 사용하여 for문처럼 각각의 요소를 사용하게 된다

 

- 버퍼를 가진 채널

채널에는 버퍼가 없기때문에 send()가 호출되면 receive() 함수가 호출되기 전까지

send()는 일시적으로 지연된다

receive()가 호출되어도 send()가 호출되기 전까지는 지연된다

만약 버퍼 크기를 지정하게 되면 한번에 여러 데이터를 보낼수 있다

채널의 버퍼 크기는 Channel의 객체 생성시 매개변수가 버퍼의 크기가 된다

위의 예제에서는 버퍼 크기를 3으로 지정하였으며

send()가 데이터를 계속 보내다가 버퍼가 가득차면 일시적으로 지연된다

 

'Kotlin' 카테고리의 다른 글

코루틴의 동작 제어  (0) 2020.09.13
코루틴의 문맥  (0) 2020.09.12
runBlocking  (0) 2020.09.06
코루틴 launch, async  (0) 2020.09.05
스레드  (0) 2020.08.29