GO · 함수
제네릭 함수 심화
복수 타입 파라미터와 제약을 조합하여 타입 안전한 유틸리티 함수를 작성합니다.
함수고급genericsgroup-bycmpslices
핵심 설명
복수 타입 파라미터와 제약을 조합하여 타입 안전한 유틸리티 함수를 작성합니다.
Go code
package main
import (
"cmp"
"fmt"
"slices"
)
// 복수 타입 파라미터
func GroupBy[T any, K comparable](items []T, key func(T) K) map[K][]T {
groups := make(map[K][]T)
for _, item := range items {
k := key(item)
groups[k] = append(groups[k], item)
}
return groups
}
// cmp.Ordered 활용 (Go 1.21+)
func Clamp[T cmp.Ordered](val, min, max T) T {
if val < min { return min }
if val > max { return max }
return val
}
func main() {
words := []string{"go", "rust", "go", "python", "rust", "go"}
groups := GroupBy(words, func(s string) string { return s })
for k, v := range groups {
fmt.Printf("%s: %d개\n", k, len(v))
}
fmt.Println(Clamp(15, 0, 10)) // 10
fmt.Println(Clamp(-5, 0, 10)) // 0
// slices 패키지 활용 (Go 1.21+)
nums := []int{3, 1, 4, 1, 5}
slices.Sort(nums)
fmt.Println(nums) // [1 1 3 4 5]
}학습 팁
Go 1.21의 slices와 maps 패키지는 제네릭 기반 유틸리티를 제공합니다. 직접 구현하기 전에 표준 라이브러리를 확인하세요.
주의할 점
제네릭 함수에서 타입 파라미터가 너무 많으면 가독성이 떨어집니다. 2-3개를 넘기면 별도 타입이나 인터페이스로 분리하세요.
자주 묻는 질문
제네릭 함수 심화란 무엇인가요?
복수 타입 파라미터와 제약을 조합하여 타입 안전한 유틸리티 함수를 작성합니다.
제네릭 함수 심화 학습 시 주의할 점은 무엇인가요?
제네릭 함수에서 타입 파라미터가 너무 많으면 가독성이 떨어집니다. 2-3개를 넘기면 별도 타입이나 인터페이스로 분리하세요.
Continue Learning
Go 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.