[Go] 구조체 임베딩
Go는 일반적인 상속 기능과 완전 똑같은건 없지만, "임베딩"이라는 신택스를 통해 거의 동등한 기능을 구현할 수 있다.
실제로는 그냥 구성을 통해 구조체 내부에 다른 구조체를 내장하는 것 뿐이지만, 그 내장된 구조체의 모든 필드를 바깥 구조체에서도 동일하게 접근할 수 있게 해놔서 상속처럼 보이게 해주는 것이다.
가령.
사람을 뜻하는 Person 타입이 있고, 그 하부 카테고리로 학생의 Student 타입이 있다면.
이런식으로 구성할 수 있을 것이다.
이렇게 Person을 구성했다.
이름 하나만을 가지는 단출한 구조다.
학생은 그에 더해 "학교 이름"을 더 가지도록 했다.
그리고 Person 타입 정의 자체를 필드에 때려박았다. 이러기만 하면 자동으로 임베딩이 처리된다.
초기화는 이런식으로 할수 있다. 별개의 필드처럼 값을 꼬박꼬박 넣어줘야 한다.
그리고 임베딩한 Person의 Introduce를 호출하는 것을 볼 수 있다.
저걸 실행하면
이렇게 잘 동작할 것이다.
메서드뿐만 아니라 개별 필드 값도 자유롭게 접근이 가능하다.
상속처럼 오버라이딩을 적용하는 것도 가능하다.
이전에는 Student에서 Introduce를 호출하면 Person의 구현체가 호출됐지만, 이러면 각 타입에 맞는 메서드 버전이 호출된다.

유의할점은, 진짜 상속은 아니라서 임베딩에 따른 다형성은 지원되지 않는다는 것이다.
참조
https://golangkorea.github.io/post/go-start/object-oriented/
https://eli.thegreenplace.net/2020/embedding-in-go-part-1-structs-in-structs/