0Pricing
Kotlin Academy · 강의

Flow 연산자: map, filter, transform 및 take

중간 연산자를 적용해 Flow 방출을 변환하고 제한해 보세요.

Flow 연산자: map, filter, transform 및 take은(는) CoddyKit의 무료 Kotlin Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Kotlin Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Kotlin Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

플로란 무엇인가요?

Flow는 콜드 비동기 스트림입니다. map, filter, transform과 같은 중간 연산자는 지연 실행되므로 수집될 때만 실행됩니다.

import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
fun numbers(): Flow<Int> = flow {
    repeat(5) { emit(it + 1) }
}
fun main() = runBlocking {
    numbers().collect { println(it) }
}

매핑 연산자

map은 방출되는 각 값을 변환합니다. 지연 실행되는 일대일 변환입니다.

import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
fun main() = runBlocking {
    (1..5).asFlow()
        .map { it * it }
        .collect { println(it) } // 1 4 9 16 25
}

필터링 연산자

filter는 predicate와 일치하는 요소만 통과시키고 나머지는 제거합니다.

import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
fun main() = runBlocking {
    (1..10).asFlow()
        .filter { it % 2 == 0 }
        .collect { println(it) } // 2 4 6 8 10
}

변환 연산자

transform은 가장 일반적인 연산자입니다. 입력 요소 하나당 값을 0개, 1개 또는 여러 개 내보낼 수 있습니다.

import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
fun main() = runBlocking {
    (1..3).asFlow()
        .transform { n ->
            emit("Item $n")
            emit("Done $n")
        }
        .collect { println(it) }
}

take 연산자

take(n)은 처음 n개 요소만 가져온 다음 상위 플로를 취소합니다.

import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
fun main() = runBlocking {
    flow {
        repeat(100) { emit(it) }
    }.take(3)
     .collect { println(it) } // 0 1 2
}

takeWhile과 dropWhile

takeWhile은 predicate가 참인 동안 요소를 가져오고, dropWhile은 predicate가 거짓이 될 때까지 요소를 버립니다.

import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
fun main() = runBlocking {
    (1..10).asFlow()
        .takeWhile { it < 5 }
        .collect { println(it) } // 1 2 3 4

    (1..10).asFlow()
        .dropWhile { it < 5 }
        .collect { println(it) } // 5 6 7 8 9 10
}

연산자 연결하기

연산자는 합성할 수 있습니다. 각 연산자가 새로운 Flow를 반환하므로 선언적인 처리 흐름을 구성할 수 있습니다.

import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
fun main() = runBlocking {
    (1..20).asFlow()
        .filter { it % 3 == 0 }
        .map { it * 2 }
        .take(4)
        .collect { println(it) } // 6 12 18 24
}

mapNotNull

mapNotNull은 한 단계로 매핑하면서 null 결과를 제거합니다. map + filter { it != null }과 같습니다.

import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
fun main() = runBlocking {
    flowOf("1", "two", "3", "four", "5")
        .mapNotNull { it.toIntOrNull() }
        .collect { println(it) } // 1 3 5
}

flatMapConcat

flatMapConcat은 각 요소를 플로로 매핑하고 결과를 순차적으로 연결합니다.

import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
fun main() = runBlocking {
    (1..3).asFlow()
        .flatMapConcat { n -> flowOf("$n-a", "$n-b") }
        .collect { println(it) }
}

부수 효과에 onEach 사용하기

onEach는 스트림을 변경하지 않고 각 요소에 부수 효과를 적용하므로, 처리 흐름에서 로그 기록이나 분석 작업에 적합합니다.

import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
fun main() = runBlocking {
    (1..5).asFlow()
        .onEach { println("Processing: $it") }
        .filter { it % 2 == 0 }
        .collect { println("Collected: $it") }
}

플로는 콜드 방식입니다

collect를 호출할 때마다 플로가 처음부터 다시 시작됩니다. 터미널 연산자가 수집을 시작할 때까지 어떤 요소도 방출되거나 변환되지 않습니다.

import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
fun main() = runBlocking {
    val flow = (1..3).asFlow().map { println("map $it"); it * 2 }
    println("Before collect")
    flow.collect { println("got $it") }
    println("Second collect:")
    flow.collect { println("got $it") }  // runs again
}

빠른 확인

상위 플로의 요소마다 0개, 1개 또는 여러 값을 내보내는 연산자는 무엇인가요?

복습

매핑은 일대일로 변환하고, 필터링은 요소를 제거하며, 변환은 원하는 개수만큼 값을 내보내고, take는 개수를 제한합니다. 선언적으로 연결하여 사용하십시오. 플로는 콜드 방식이므로 수집될 때만 실행됩니다.

자주 묻는 질문

“Flow 연산자: map, filter, transform 및 take” 강의는 무료인가요?

네 — “Flow 연산자: map, filter, transform 및 take” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Kotlin Academy 강의 전체를 잠금 해제할 수 있습니다. Kotlin Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“Flow 연산자: map, filter, transform 및 take”에서 뭘 배우나요?

중간 연산자를 적용해 Flow 방출을 변환하고 제한해 보세요. 브라우저에서 직접 실행하는 실습 코드로 Kotlin Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Kotlin Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Kotlin Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“Flow 연산자: map, filter, transform 및 take” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Kotlin Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Kotlin Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Flow 연산자: map, filter, transform 및 take
  2. catch와 onCompletion: Flow의 오류 처리
  3. combine과 zip: 여러 Flow 병합하기
  4. flowOn과 buffer: 컨텍스트와 백프레셔
← Kotlin Academy(으)로 돌아가기