myInterface
, myConcrete
)var i myInterface = c
이면 c의 복사본을 저장myInterface
에 해당하는 메서드만 포함하며 다른 myConcrete
의 메서드는 포함하지 않음i.tab->type
으로 실제 타입 포인터 획득tab은 i-table 을 나타내는 멤버
i.tab->fun[0](i.data)
i.data
는 32비트(워드) 포인터를 인자로 전달 받는 것(*myConcrete).someFn
(인터페이스 타입, 구체 타입)
쌍의 itable을 계산하는 것은 비효율적type description structure
를 생성interface runtime
은 두 테이블을 보고(i -> c) itable을 계산하여 캐싱O(ni * nc)
O(ni + nc)
(myConcrete).someFn
간접호출
indirect call
: 함수의 주소를 직접 명시하지 않고, 포인터나 테이블을 통해 함수의 주소를 찾아 호출
Go Data Structures: Interfaces