일시 중단 가능한 시퀀스 및 이터레이터

  1. 호출 사이에서 일시 중단되지만, 실행 중에는 일시 중단될 수 없다. 이로 인해 일시 중단 연산이 없어도 반복할수 있다.

  2. 시퀀스와 이터레이터의 빌더는 CoroutineContext를 받지 않는다. 기본적으로 코드를 호출한 컨텍스트와 동일한 컨텍스트에서 코드가 실행됨을 의미한다.

  3. 정보 산출(yielding)후에만 일시 중지할 수 있다. 이를 위해선 yield() 또는 yielAll() 함수를 호출해야한다.

    → yield()는 빌드중인 이터레이에 값을 제공하고 다음 값이 요청될 때 까지 일시 중단한다.(일시중단함수)

값 산출

값을 산출하면 값이 다시 요청될 때까지 시퀀스 또는 이터레이터가 일시중단 된다.

val iterator = iterator {
    yield("First")
    yield("Second")
    yield("Third")
}

위 코드는 세 가지 요소를 포함하는 이터레이터를 빌드한다. 요소가 처음 요청될 때 첫 번째 줄이 실행돼

“First”값이 산출되고 이후에 실행이 중단된다.

다음 요소가 요청되면 두 번째 줄이 실행돼 “Second”가 산출되고 다시 일시 중단된다. 따라서 이터레이터가 포함하는 세 가지 요소를 얻으려면 next() 함수를 세 번 호출하면 된다.

→ next() 함수는 데이터 소스에서 첫 번째 요소를 생성하고 반환한 직후에 일시 중단된다. next()가 다시 호출될 때마다 값이 나올 때까지 실행이 재개되며, 이후에 한번 더 일시 중단된다.

val iterator = iterator {
    yield("First")
    yield("Second")
    yield("Third")
}
        
Log.d("1 : ", iterator.next())
Log.d("2 : ", iterator.next())
Log.d("3 : ", iterator.next())

// 실행결과
D/1 :: First
D/2 :: Second
D/3 :: Third

이터레이터는 값이 생성된 후 매번 일시 중단돼 총 세번 일시 중단된다. 시퀀스 및 이터레이터는 일시 중단 불가능한 코드에서 호출할 수 있다.

이터레이터

이터레이터는 요소들의 컬렉션을 순서대로 살펴보는 데 특히 유용하다. 코틀린 이터레이터의 특성은