PHpullh
학습 라이브러리/Go/타입 제약 (Type Constraints)

GO · 기초 문법

타입 제약 (Type Constraints)

인터페이스를 타입 제약으로 사용하여 제네릭 함수에서 허용하는 타입을 제한합니다. ~로 기저 타입을 포함합니다.

기초 문법고급constraintsgenericstildeordered

핵심 설명

인터페이스를 타입 제약으로 사용하여 제네릭 함수에서 허용하는 타입을 제한합니다. ~로 기저 타입을 포함합니다.

Go code

package main

import (
	"fmt"
	"golang.org/x/exp/constraints"
)

// 커스텀 제약 정의
type Number interface {
	~int | ~int64 | ~float64
}

func Sum[T Number](nums []T) T {
	var total T
	for _, n := range nums {
		total += n
	}
	return total
}

// constraints.Ordered 사용
func Max[T constraints.Ordered](a, b T) T {
	if a > b {
		return a
	}
	return b
}

type Score int // ~int 덕분에 사용 가능

func main() {
	fmt.Println(Sum([]int{1, 2, 3}))        // 6
	fmt.Println(Sum([]float64{1.1, 2.2}))   // 3.3
	fmt.Println(Sum([]Score{10, 20, 30}))    // 60
	fmt.Println(Max("apple", "banana"))      // banana
}

학습 팁

~int~는 기저 타입이 int인 모든 타입(예: type Score int)을 포함합니다.

주의할 점

타입 제약 없이 [T any]를 사용하면 +, > 등의 연산자를 사용할 수 없습니다. 적절한 제약을 지정하세요.

자주 묻는 질문

타입 제약 (Type Constraints)란 무엇인가요?

인터페이스를 타입 제약으로 사용하여 제네릭 함수에서 허용하는 타입을 제한합니다. ~ 로 기저 타입을 포함합니다.

타입 제약 (Type Constraints) 학습 시 주의할 점은 무엇인가요?

타입 제약 없이 [T any] 를 사용하면 + , > 등의 연산자를 사용할 수 없습니다. 적절한 제약을 지정하세요.