KOTLIN · 함수형
모나드 패턴 (Monad Pattern)
모나드는 값을 감싸고 flatMap으로 연쇄 연산을 수행하는 패턴입니다. Kotlin에서 Maybe/Option 모나드를 구현합니다.
함수형고급monadmaybeflatMapfunctional-pattern
핵심 설명
모나드는 값을 감싸고 flatMap으로 연쇄 연산을 수행하는 패턴입니다. Kotlin에서 Maybe/Option 모나드를 구현합니다.
Kotlin code
sealed class Maybe<out T> {
data class Just<T>(val value: T) : Maybe<T>()
data object None : Maybe<Nothing>()
fun <R> map(f: (T) -> R): Maybe<R> = when (this) {
is Just -> Just(f(value))
is None -> None
}
fun <R> flatMap(f: (T) -> Maybe<R>): Maybe<R> = when (this) {
is Just -> f(value)
is None -> None
}
fun getOrElse(default: @UnsafeVariance T): T = when (this) {
is Just -> value
is None -> default
}
}
fun findUser(id: Int): Maybe<String> =
if (id > 0) Maybe.Just("User-$id") else Maybe.None
fun findEmail(user: String): Maybe<String> =
Maybe.Just("$user@example.com")
fun main() {
val email = findUser(1)
.flatMap { findEmail(it) }
.map { it.uppercase() }
println(email) // Just(USER-1@EXAMPLE.COM)
val none = findUser(-1)
.flatMap { findEmail(it) }
println(none) // None
}학습 팁
실무에서는 Kotlin의 nullable 타입이 Maybe/Option의 역할을 대부분 수행합니다. 더 복잡한 모나드가 필요하면 Arrow 라이브러리를 사용하세요.
주의할 점
flatMap과 map을 혼동하지 마세요. map은 값을 변환하고, flatMap은 변환 결과가 다시 Maybe인 경우 사용합니다.
자주 묻는 질문
모나드 패턴 (Monad Pattern)란 무엇인가요?
모나드는 값을 감싸고 flatMap 으로 연쇄 연산을 수행하는 패턴입니다. Kotlin에서 Maybe/Option 모나드를 구현합니다.
모나드 패턴 (Monad Pattern) 학습 시 주의할 점은 무엇인가요?
flatMap 과 map 을 혼동하지 마세요. map 은 값을 변환하고, flatMap 은 변환 결과가 다시 Maybe인 경우 사용합니다.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.