🔥 타입 파라미터
338자
4분
Go 언어에서는 제네릭(Generic) 함수를 사용하여 다양한 타입에 대해 유연하게 작업할 수 있습니다. 제네릭 함수의 타입 파라미터는 함수 인자 앞에 대괄호([]) 안에 작성합니다.
func Index[T comparable](s []T, x T) int
go
위의 선언은 s
가 comparable
제약 조건을 충족하는 어떤 타입 T
의 슬라이스임을 의미합니다. x
또한 동일한 타입의 값입니다.
comparable
은 유용한 제약 조건으로, ==
와 !=
연산자를 사용하여 값을 비교할 수 있게 해줍니다. 이 예제에서는 일치하는 값을 찾을 때까지 슬라이스의 모든 요소와 값을 비교하는 데 사용됩니다. 이 Index
함수는 비교를 지원하는 모든 타입에 대해 동작합니다.
package main import "fmt" // Index returns the index of x in s, or -1 if not found. func Index[T comparable](s []T, x T) int { for i, v := range s { // v and x are type T, which has the comparable // constraint, so we can use == here. if v == x { return i } } return -1 } func main() { // Index works on a slice of ints si := []int{10, 20, 15, -10} fmt.Println(Index(si, 15)) // Index also works on a slice of strings ss := []string{"foo", "bar", "baz"} fmt.Println(Index(ss, "hello")) }
go
위의 코드에서 Index
함수는 다음과 같이 동작합니다:
Index
함수는 제네릭 타입 파라미터T
를 사용하여 선언되었습니다. 이는T
가comparable
제약 조건을 충족해야 함을 의미합니다.- 함수는 타입
T
의 슬라이스s
와 타입T
의 값x
를 매개변수로 받습니다. for
루프를 사용하여 슬라이스s
의 각 요소v
와 인덱스i
를 순회합니다.- 각 반복에서
v
와x
를 비교하여 일치하는 값을 찾습니다.v
와x
는comparable
제약 조건을 충족하므로==
연산자를 사용할 수 있습니다. - 일치하는 값이 발견되면 해당 인덱스
i
를 반환합니다. - 슬라이스 전체를 순회한 후에도 일치하는 값이 없으면 -1을 반환합니다.
main
함수에서는 Index
함수를 다양한 타입의 슬라이스에 적용하여 사용하는 방법을 보여줍니다:
- 정수 슬라이스
si
에 대해Index
함수를 호출하여 값 15의 인덱스를 찾습니다. - 문자열 슬라이스
ss
에 대해Index
함수를 호출하여 값 "hello"의 인덱스를 찾습니다. 이 경우 "hello"는 슬라이스에 존재하지 않으므로 -1을 반환합니다.
이렇게 제네릭 함수를 사용하면 코드의 중복을 줄이고 다양한 타입에 대해 유연하게 작업할 수 있습니다. 제네릭 함수는 타입 안전성을 유지하면서도 코드의 재사용성을 높여줍니다.