PHpullh
학습 라이브러리/Go/제네릭 맵/필터/리듀스

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 체인을 길게 이으면 매번 새 슬라이스를 할당합니다. 성능이 중요하면 단일 루프로 결합하세요.

Continue Learning

Go 학습을 이어가세요

총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.