PHpullh
학습 라이브러리/Go/파이프라인 패턴

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]
}

학습 팁

파이프라인의 각 단계를 순수 함수로 만들면 테스트와 재사용이 쉽습니다.

주의할 점

파이프라인 단계에서 입력 슬라이스를 직접 수정하면 이전 단계의 결과가 오염됩니다. 항상 새 슬라이스를 반환하세요.

자주 묻는 질문

파이프라인 패턴란 무엇인가요?

채널과 함수 합성으로 데이터 처리 파이프라인을 구현합니다. 각 단계가 독립적으로 실행됩니다.

파이프라인 패턴 학습 시 주의할 점은 무엇인가요?

파이프라인 단계에서 입력 슬라이스를 직접 수정하면 이전 단계의 결과가 오염됩니다. 항상 새 슬라이스를 반환하세요.