PHpullh
학습 라이브러리/Go/함수형 프로그래밍 패턴

GO · 함수

함수형 프로그래밍 패턴

Go에서 함수형 프로그래밍 패턴을 활용합니다. 커링, 합성, 파이프라인을 구현합니다.

함수고급composepipefunctionalhigher-order

핵심 설명

Go에서 함수형 프로그래밍 패턴을 활용합니다. 커링, 합성, 파이프라인을 구현합니다.

Go code

package main

import (
	"fmt"
	"strings"
)

// 함수 합성
func Compose[T any](fns ...func(T) T) func(T) T {
	return func(v T) T {
		for i := len(fns) - 1; i >= 0; i-- {
			v = fns[i](v)
		}
		return v
	}
}

// 파이프 (왼쪽에서 오른쪽)
func Pipe[T any](fns ...func(T) T) func(T) T {
	return func(v T) T {
		for _, fn := range fns {
			v = fn(v)
		}
		return v
	}
}

func main() {
	trim := strings.TrimSpace
	upper := strings.ToUpper
	addBang := func(s string) string { return s + "!" }

	transform := Pipe(trim, upper, addBang)
	fmt.Println(transform("  hello  ")) // HELLO!

	// Compose는 역순
	transform2 := Compose(addBang, upper, trim)
	fmt.Println(transform2("  world  ")) // WORLD!
}

학습 팁

Pipe는 읽는 순서(왼→오)대로 실행되어 직관적입니다. Compose는 수학적 합성(오→왼) 순서입니다.

주의할 점

과도한 함수형 스타일은 Go의 관용구와 맞지 않을 수 있습니다. 간단한 루프가 더 읽기 좋은 경우가 많습니다.

자주 묻는 질문

함수형 프로그래밍 패턴란 무엇인가요?

Go에서 함수형 프로그래밍 패턴을 활용합니다. 커링, 합성, 파이프라인을 구현합니다.

함수형 프로그래밍 패턴 학습 시 주의할 점은 무엇인가요?

과도한 함수형 스타일은 Go의 관용구와 맞지 않을 수 있습니다. 간단한 루프가 더 읽기 좋은 경우가 많습니다.