GO · 기초 문법
타입 파라미터 (제네릭 기초)
Go 1.18+의 제네릭으로 타입 안전한 범용 함수와 구조체를 작성합니다. [T any] 구문으로 타입 파라미터를 선언합니다.
기초 문법고급genericstype-parameterstackmap-function
핵심 설명
Go 1.18+의 제네릭으로 타입 안전한 범용 함수와 구조체를 작성합니다. [T any] 구문으로 타입 파라미터를 선언합니다.
Go code
package main
import "fmt"
// 제네릭 함수
func Map[T, U any](slice []T, fn func(T) U) []U {
result := make([]U, len(slice))
for i, v := range slice {
result[i] = fn(v)
}
return result
}
// 제네릭 구조체
type Stack[T any] struct {
items []T
}
func (s *Stack[T]) Push(v T) { s.items = append(s.items, v) }
func (s *Stack[T]) Pop() (T, bool) {
if len(s.items) == 0 {
var zero T
return zero, false
}
v := s.items[len(s.items)-1]
s.items = s.items[:len(s.items)-1]
return v, true
}
func main() {
nums := Map([]int{1, 2, 3}, func(n int) string {
return fmt.Sprintf("#%d", n)
})
fmt.Println(nums) // [#1 #2 #3]
s := &Stack[int]{}
s.Push(10)
s.Push(20)
v, _ := s.Pop()
fmt.Println(v) // 20
}학습 팁
타입 추론 덕분에 호출 시 타입 인자를 생략할 수 있는 경우가 많습니다. Map(nums, fn)처럼 간결하게 사용하세요.
주의할 점
제네릭 타입의 제로 값이 필요할 때 nil을 반환하면 값 타입에서 컴파일 에러가 발생합니다. var zero T를 사용하세요.
자주 묻는 질문
타입 파라미터 (제네릭 기초)란 무엇인가요?
Go 1.18+의 제네릭으로 타입 안전한 범용 함수와 구조체를 작성합니다. [T any] 구문으로 타입 파라미터를 선언합니다.
타입 파라미터 (제네릭 기초) 학습 시 주의할 점은 무엇인가요?
제네릭 타입의 제로 값이 필요할 때 nil 을 반환하면 값 타입에서 컴파일 에러가 발생합니다. var zero T 를 사용하세요.
Continue Learning
Go 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.