GO · 구조체/인터페이스
임베딩으로 상속 흉내내기
Go는 상속이 없지만 구조체 임베딩으로 코드 재사용과 다형성을 구현합니다. 합성(Composition) 패턴입니다.
구조체/인터페이스중급embeddingcompositionpolymorphisminterface
핵심 설명
Go는 상속이 없지만 구조체 임베딩으로 코드 재사용과 다형성을 구현합니다. 합성(Composition) 패턴입니다.
Go code
package main
import "fmt"
type Animal struct {
Name string
}
func (a Animal) Speak() string {
return a.Name + "이(가) 소리를 냅니다"
}
type Dog struct {
Animal // 임베딩
Breed string
}
// 메서드 오버라이드
func (d Dog) Speak() string {
return d.Name + ": 멍멍!"
}
type Cat struct {
Animal
}
func (c Cat) Speak() string {
return c.Name + ": 야옹~"
}
type Speaker interface {
Speak() string
}
func main() {
pets := []Speaker{
Dog{Animal: Animal{Name: "바둑이"}, Breed: "진돗개"},
Cat{Animal: Animal{Name: "나비"}},
}
for _, p := range pets {
fmt.Println(p.Speak())
}
}학습 팁
임베딩 + 인터페이스 조합이 Go의 다형성 패턴입니다. 상속 대신 "작은 인터페이스 + 합성"을 사용하세요.
주의할 점
임베딩된 타입의 메서드는 외부 타입을 모릅니다. Animal.Speak()에서 Dog의 필드에 접근할 수 없습니다.
자주 묻는 질문
임베딩으로 상속 흉내내기란 무엇인가요?
Go는 상속이 없지만 구조체 임베딩으로 코드 재사용과 다형성을 구현합니다. 합성(Composition) 패턴입니다.
임베딩으로 상속 흉내내기 학습 시 주의할 점은 무엇인가요?
임베딩된 타입의 메서드는 외부 타입을 모릅니다. Animal.Speak() 에서 Dog 의 필드에 접근할 수 없습니다.
Continue Learning
Go 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.