임베딩
go 언어에는 상속이 없다
대신 임베딩을 통한 조합으로 상속과 유사한 효과를 볼 수 있다
표현
type SmartPhone struct {
Navigation
}
위와 같이 구조체 안에 변수명 없이 타입명만 정의 하는 것으로 그 타입(구조체)을 임베딩할 수가 있다
만일 SmartPhone이 변수명 있는 Navigation 타입의 멤버를 갖는다고 해보자
type SmartPhone struct {
navi Navigation
}
이 때 SmartPhone에서 멤버 navi가 갖고 있는 Navigate()을 그대로 사용하고 싶다면 다음과 같이
함수를 만들 수 있다
func (sp SmartPhone) Navigate() {
return sp.navi.Navigate()
}
그럼 아래와 같이 SmartPhone에서 Navigate() 사용할 수 있다
func main() {
sp := SmartPhone{Navigation{}}
sp.Navigate()
}
마치 SmartPhone이 Navigation을 상속 받은 것과 같은 효과를 갖게 된다
다시 처음으로 돌아가서 임베딩을 하면
즉, 변수명 없이 타입명만 정의하게 되면 이게 가능해진다
따라서, 겉보기엔 상속과 같지만
같은 함수명으로 구조체 멤버의 함수를 호출해준다고
이해할 수 있다
참고
'Go' 카테고리의 다른 글
golang 리시버 (0) | 2021.02.14 |
---|---|
Go run, build, install? (0) | 2021.01.20 |
Go modules (0) | 2021.01.19 |
댓글