728x90
구조체
여러 필드를 하나로 묶어 새로운 타입을 정의할 수 있는 방법 (ex: 개 > 이름, 나이, ...)
메서드
특정 타입에 속한 함수 (개 > 짖기, ...)
메서드를 정의하면 해당 타입의 인스턴스에서 호출할 수 있음
인터페이스
메서드 시그니처의 집합으로, 어떤 타입이 특정 인터페이스를 구현하려면 그 인터페이스에 정의된 모든 메서드를 구현해야 함
(인터페이스 : 동물 > 짖기 => 구조체 : 강아지 > 짖기, 고양이 > 짖기)
예시
package main
import "fmt"
// 인터페이스 정의
type Animal interface {
Speak() string
}
// Dog 구조체 정의
type Dog struct {
Name string
Age int
}
// Dog에 Speak 메서드 구현
func (d Dog) Speak() string {
return "Woof!"
}
// Cat 구조체 정의
type Cat struct {
Name string
}
// Cat에 Speak 메서드 구현
func (c Cat) Speak() string {
return "Meow!"
}
func main() {
// Animal 인터페이스 타입의 슬라이스 생성
animals := []Animal{
Dog{Name: "Rex", Age: 5},
Cat{Name: "Whiskers"},
}
// 각 동물의 Speak 메서드 호출
for _, animal := range animals {
fmt.Println(animal.Speak())
}
}
728x90
'Go' 카테고리의 다른 글
Go 구조체 메서드의 값 리시버와 포인터 리시버 (1) | 2024.09.13 |
---|---|
Go 함수와 메서드 차이 (0) | 2024.06.24 |