PHpullh
학습 라이브러리/Go/타입 파라미터 (제네릭 기초)

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 를 사용하세요.