백엔드/Go := Golang
[ Golang ] 인터페이스와 제네릭
잡캐헨리
2024. 9. 11. 23:32
인터페이스
인터페이스는 Go에서 메서드 집합을 정의한 것으로, 해당 메서드를 구현한 모든 타입과 호환될 수 있다.
인터페이스의 구현
type TestInterface interface {
save(string) // 리턴타입이 없는 경우
get() // 리턴타입, 파라미터 모두 있는 경우
put() // 리턴타입, 파라미터 모두 없는 경우
}
Go 인터페이스는 Go에서 객체지향을 구현하는 방법으로, 인터페이스를 embed 해 사용한다.
다양한 타입이 같은 인터페이스를 구현함으로써, 해당 인터페이스를 매개변수로 받는 함수는 여러 타입과 호환될 수 있다
Generic
Go 1.18에서 도입된 제네릭은 여러 타입에서 동작할 수 있는 일반화된 함수와 데이터 구조를 작성하는 방법이다.
package main
import "fmt"
// 제네릭 함수 정의
func Print[T any](value T) {
fmt.Println(value)
}
func main() {
Print(42) // int 타입
Print("Go") // string 타입
Print(3.14) // float64 타입
}
인터페이스와 제네릭을 혼합
package main
import "fmt"
// 인터페이스 정의
type Stringer interface {
String() string
}
// 제네릭 함수에 인터페이스를 제약으로 사용
func PrintString[T Stringer](s T) {
fmt.Println(s.String())
}
// 타입 정의
type Person struct {
Name string
}
// 인터페이스 메서드 구현
func (p Person) String() string {
return p.Name
}
func main() {
p := Person{Name: "Alice"}
PrintString(p) // 출력: Alice
}