GO · 기초 문법
제네릭과 인터페이스 결합
제네릭 타입 제약에 메서드 요구사항을 포함하여 타입 안전한 다형성을 구현합니다.
기초 문법고급genericsinterfaceconstraintcomposition
핵심 설명
제네릭 타입 제약에 메서드 요구사항을 포함하여 타입 안전한 다형성을 구현합니다.
Go code
package main
import (
"fmt"
"strings"
)
// 메서드 제약 인터페이스
type Stringer interface {
String() string
}
type Validator interface {
Validate() error
}
// 두 제약을 합성
type ValidStringer interface {
Stringer
Validator
}
func PrintValid[T ValidStringer](items []T) {
for _, item := range items {
if err := item.Validate(); err != nil {
fmt.Printf("INVALID: %v\n", err)
continue
}
fmt.Println(item.String())
}
}
type Email string
func (e Email) String() string { return string(e) }
func (e Email) Validate() error {
if !strings.Contains(string(e), "@") {
return fmt.Errorf("유효하지 않은 이메일: %s", e)
}
return nil
}
func main() {
emails := []Email{"user@go.dev", "invalid", "admin@go.dev"}
PrintValid(emails)
}학습 팁
제약 인터페이스에 타입 요소(~int | ~string)와 메서드를 동시에 포함할 수 있습니다.
주의할 점
타입 요소를 포함하는 인터페이스는 제약으로만 사용할 수 있고, 일반 변수 타입으로는 사용할 수 없습니다.
자주 묻는 질문
제네릭과 인터페이스 결합란 무엇인가요?
제네릭 타입 제약에 메서드 요구사항을 포함하여 타입 안전한 다형성을 구현합니다.
제네릭과 인터페이스 결합 학습 시 주의할 점은 무엇인가요?
타입 요소를 포함하는 인터페이스는 제약으로만 사용할 수 있고, 일반 변수 타입으로는 사용할 수 없습니다.
Continue Learning
Go 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.