GO · 함수
제네릭 타입 제약 심화
유니온 타입, 메서드 제약, ~ 연산자를 조합하여 정교한 타입 제약을 만듭니다.
함수고급constraintsnumericuniontilde
핵심 설명
유니온 타입, 메서드 제약, ~ 연산자를 조합하여 정교한 타입 제약을 만듭니다.
Go code
package main
import "fmt"
// 유니온 + 틸드 조합
type Numeric interface {
~int | ~int8 | ~int16 | ~int32 | ~int64 |
~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64 |
~float32 | ~float64
}
// 메서드 제약
type Stringable interface {
~int | ~string
String() string
}
func Abs[T Numeric](n T) T {
if n < 0 { return -n }
return n
}
func MinMax[T Numeric](nums []T) (T, T) {
min, max := nums[0], nums[0]
for _, n := range nums[1:] {
if n < min { min = n }
if n > max { max = n }
}
return min, max
}
type Celsius float64
type Fahrenheit float64
func main() {
fmt.Println(Abs(-42)) // 42
fmt.Println(Abs(Celsius(-10))) // 10
min, max := MinMax([]int{3, 1, 4, 1, 5, 9})
fmt.Printf("min=%d, max=%d\n", min, max)
}학습 팁
표준 라이브러리의 cmp.Ordered는 이미 모든 정렬 가능 타입을 포함합니다. 커스텀 제약은 특수한 경우에만 만드세요.
주의할 점
유니온 타입 제약에 ~를 빠뜨리면 기저 타입이 같은 커스텀 타입(type Celsius float64)이 제외됩니다.
자주 묻는 질문
제네릭 타입 제약 심화란 무엇인가요?
유니온 타입, 메서드 제약, ~ 연산자를 조합하여 정교한 타입 제약을 만듭니다.
제네릭 타입 제약 심화 학습 시 주의할 점은 무엇인가요?
유니온 타입 제약에 ~ 를 빠뜨리면 기저 타입이 같은 커스텀 타입( type Celsius float64 )이 제외됩니다.
Continue Learning
Go 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.