GO · 함수
제네릭 맵/필터/리듀스
함수형 프로그래밍의 핵심 패턴인 Map, Filter, Reduce를 제네릭으로 구현합니다.
함수고급mapfilterreducegenericsfunctional
핵심 설명
함수형 프로그래밍의 핵심 패턴인 Map, Filter, Reduce를 제네릭으로 구현합니다.
Go code
package main
import "fmt"
func Map[T, U any](s []T, fn func(T) U) []U {
r := make([]U, len(s))
for i, v := range s {
r[i] = fn(v)
}
return r
}
func Filter[T any](s []T, pred func(T) bool) []T {
var r []T
for _, v := range s {
if pred(v) { r = append(r, v) }
}
return r
}
func Reduce[T, U any](s []T, init U, fn func(U, T) U) U {
acc := init
for _, v := range s {
acc = fn(acc, v)
}
return acc
}
func main() {
nums := []int{1, 2, 3, 4, 5}
doubled := Map(nums, func(n int) int { return n * 2 })
fmt.Println(doubled) // [2 4 6 8 10]
evens := Filter(nums, func(n int) bool { return n%2 == 0 })
fmt.Println(evens) // [2 4]
sum := Reduce(nums, 0, func(acc, n int) int { return acc + n })
fmt.Println(sum) // 15
}학습 팁
Go 1.23+에서는 iter 패키지와 range-over-func로 더 자연스럽게 함수형 패턴을 사용할 수 있습니다.
주의할 점
Map/Filter 체인을 길게 이으면 매번 새 슬라이스를 할당합니다. 성능이 중요하면 단일 루프로 결합하세요.
자주 묻는 질문
제네릭 맵/필터/리듀스란 무엇인가요?
함수형 프로그래밍의 핵심 패턴인 Map, Filter, Reduce를 제네릭으로 구현합니다.
제네릭 맵/필터/리듀스 학습 시 주의할 점은 무엇인가요?
Map/Filter 체인을 길게 이으면 매번 새 슬라이스를 할당합니다. 성능이 중요하면 단일 루프로 결합하세요.