GO · 함수형
파이프라인 패턴
채널과 함수 합성으로 데이터 처리 파이프라인을 구현합니다. 각 단계가 독립적으로 실행됩니다.
함수형고급pipelinefunctionalcompositiondata-processing
핵심 설명
채널과 함수 합성으로 데이터 처리 파이프라인을 구현합니다. 각 단계가 독립적으로 실행됩니다.
Go code
package main
import "fmt"
// 함수 파이프라인 (동기)
type Pipeline[T any] struct {
steps []func([]T) []T
}
func NewPipeline[T any]() *Pipeline[T] {
return &Pipeline[T]{}
}
func (p *Pipeline[T]) Add(step func([]T) []T) *Pipeline[T] {
p.steps = append(p.steps, step)
return p
}
func (p *Pipeline[T]) Execute(data []T) []T {
result := data
for _, step := range p.steps {
result = step(result)
}
return result
}
func main() {
pipe := NewPipeline[int]().
Add(func(nums []int) []int { // 필터: 짝수만
var r []int
for _, n := range nums { if n%2 == 0 { r = append(r, n) } }
return r
}).
Add(func(nums []int) []int { // 변환: 2배
r := make([]int, len(nums))
for i, n := range nums { r[i] = n * 2 }
return r
}).
Add(func(nums []int) []int { // 필터: 10 이하
var r []int
for _, n := range nums { if n <= 10 { r = append(r, n) } }
return r
})
result := pipe.Execute([]int{1, 2, 3, 4, 5, 6, 7, 8})
fmt.Println(result) // [4 8]
}학습 팁
파이프라인의 각 단계를 순수 함수로 만들면 테스트와 재사용이 쉽습니다.
주의할 점
파이프라인 단계에서 입력 슬라이스를 직접 수정하면 이전 단계의 결과가 오염됩니다. 항상 새 슬라이스를 반환하세요.
자주 묻는 질문
파이프라인 패턴란 무엇인가요?
채널과 함수 합성으로 데이터 처리 파이프라인을 구현합니다. 각 단계가 독립적으로 실행됩니다.
파이프라인 패턴 학습 시 주의할 점은 무엇인가요?
파이프라인 단계에서 입력 슬라이스를 직접 수정하면 이전 단계의 결과가 오염됩니다. 항상 새 슬라이스를 반환하세요.
Continue Learning
Go 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.