type Child struct {}
func (c *Child) print() { fmt.Println("I'm child) }
type Child2 struct {
Child
}
이렇게하면 Child2 타입에서 Child타입의 함수를 사용가능하잖아?
근데 아래처럼 하면 안되는거같던데 원래이럼??
type Child2 struct {
c Child
}
똑같은 코드아닌가..?
type Child struct {}
func (c *Child) print() { fmt.Println("I'm child) }
type Child2 struct {
Child
}
이렇게하면 Child2 타입에서 Child타입의 함수를 사용가능하잖아?
근데 아래처럼 하면 안되는거같던데 원래이럼??
type Child2 struct {
c Child
}
똑같은 코드아닌가..?
c.print() 로 써야하지 않나?
다른 코드임 위에꺼가 composition을 위한 별개의 문법이고 밑에거는 그냥 멤버면수에 또다른 타입이 있는거뿐임
아래거를 쓰려면 child2변수명.c.print() 하셈
근데 composition을 위한 별개의 문법이랑 c.print()로 하는거랑 차이는 딱히 없는거?
아 용어는 다른 댓글 embedding이 맞다 일반적인 개념의 composition이 밑에꺼 암튼 너가 생각하는 상속처럼 쓰려면 위에거대로 해야함 - dc App
outer안에 inner가 임베딩되어 있다고 치면 inner의 모든 속성들이 outer에서 직접 접근이 가능하지만, 컴포지션되어 있으면 너가 노출을 원하는 것들을 다시 연결해줘야함 인터페이스 문제만 해도 임베딩한 경우 inner가 구현한 인터페이스들은 outer도 자동 구현하지만 컴포지션에서는 그렇지 않음 - dc App
method set 개념을 공부하면 될듯
위는 type embedding, 밑은 흔히 얘기하는 composition임. Embedding을 하면 method set이 달라진다.
흠 이해가 안가네 달라지면 뭐가 달라지는건지..
밑에건 그냥 Child2의 멤버인 c에 Child를 집어넣은거지. 컴포지션은 패턴이고 임베딩은 기능임.