PHpullh
학습 라이브러리/Kotlin/함수 합성 (Function Composition)

KOTLIN · 함수

함수 합성 (Function Composition)

두 함수를 조합하여 새 함수를 만듭니다. composeandThen 패턴으로 데이터 변환 파이프라인을 구성합니다.

함수고급compositioncomposeandThenpipeline

핵심 설명

두 함수를 조합하여 새 함수를 만듭니다. composeandThen 패턴으로 데이터 변환 파이프라인을 구성합니다.

Kotlin code

// 함수 합성 연산자
infix fun <A, B, C> ((B) -> C).compose(g: (A) -> B): (A) -> C =
    { a -> this(g(a)) }

infix fun <A, B, C> ((A) -> B).andThen(g: (B) -> C): (A) -> C =
    { a -> g(this(a)) }

val trim: (String) -> String = String::trim
val lowercase: (String) -> String = String::lowercase
val addGreeting: (String) -> String = { "안녕하세요, $it!" }

fun main() {
    // compose: 오른쪽부터 실행
    val greetClean = addGreeting compose lowercase compose trim
    println(greetClean("  KOTLIN  "))
    // "안녕하세요, kotlin!"

    // andThen: 왼쪽부터 실행
    val pipeline = trim andThen lowercase andThen addGreeting
    println(pipeline("  WORLD  "))
    // "안녕하세요, world!"

    // 리스트 변환 파이프라인
    val process = { s: String -> s.split(",") } andThen
        { list: List<String> -> list.map { it.trim().toInt() } } andThen
        { nums: List<Int> -> nums.filter { it > 0 }.sum() }
    println(process("1, -2, 3, 4, -5"))  // 8
}

학습 팁

andThen은 실행 순서가 읽는 순서와 같아 파이프라인 구성 시 더 직관적입니다.

주의할 점

합성 함수의 타입이 일치하지 않으면 컴파일 오류가 발생합니다. f: (B) -> Cg: (A) -> B에서 B 타입이 일치해야 합니다.

자주 묻는 질문

함수 합성 (Function Composition)란 무엇인가요?

두 함수를 조합하여 새 함수를 만듭니다. compose 와 andThen 패턴으로 데이터 변환 파이프라인을 구성합니다.

함수 합성 (Function Composition) 학습 시 주의할 점은 무엇인가요?

합성 함수의 타입이 일치하지 않으면 컴파일 오류가 발생합니다. f: (B) -> C 와 g: (A) -> B 에서 B 타입이 일치해야 합니다.