protocol을 채택하여 구현한 struct는 구현한메소드정보는 protocol witness table에만 저장이 되나요?

1 답변 글타래를 보이고 있습니다
  • 글쓴이
    • HyunSu Park
      참가자
      • 글작성 : 2
      • 답글작성 : 2

      안녕하세요,

      https://developer.apple.com/videos/play/wwdc2016/416/?time=1454  

      해당 세션을 공부하면서 궁금증이 남는게 있었습니다. 궁금한점들을 많이찾아보았으나 명확한 답을 찾지 못했습니다. 

      세션을 보면서 아무래도 제 생각에는 각 타입들은 XXX.Type이라는 구현한메소드정보들을 담는 것이 static memory에 생성될 것 같습니다. 

      그리고 protocol을 채택하는 타입들은 각 타입마다  protocol witness table이 만들어진다고 합니다.

       

      제가 궁금한점은 Something이라는 타입이 protocol을 채택하여 구현한 메소드의 경우, 타입 자체 (Something.Type)에도 그정보가 저장이되는지,

      아니면 protocol witness table에만 저장이되는지 궁금합니다. 

       

      그래서 아래와같이 코드를 작성했을때, 

      변수가 struct 타입이면서, struct 인스턴스를 받는경우에, 

      protocol을 채택하여 구현한 메소드를 호출하고자할 때,

      컴파일러는 Struct.Type에 저장된 foo() 메소드를 찾아서 호출할까요,  아니면 StructAProtocolWitnessTable에서 foo()메소드를 호출하나요? 

      code

    • 야곰
      키 마스터
      • 글작성 : 37
      • 답글작성 : 580

      멋진 궁금증이네요…!

      [이 링크]가 힌트가 되려나요? 🙂

      • HyunSu Park
        참가자
        • 글작성 : 2
        • 답글작성 : 2

        감사합니다. 

        주신 링크를 해석하면서 확신이 들지 않아 다시 여쭈어봅니다. 

        저는 protocol을 따르는 타입들은 Existentail Container 레이아웃으로 만들어지고, 

        프로토콜을 채택한 모든 테이블들이 포함되어지는 witnessTables이 존재한다라고 해석했습니다. 

        그러므로 예시로 설명든 Struct타입은 , Struct 레이아웃이 아닌, Struct Existential Container 레이아웃에서  wintessTable에서  호출한다고 봐야할까요?  어렵네요… 

1 답변 글타래를 보이고 있습니다
  • 답변은 로그인 후 가능합니다.

logo landscape small

사업자번호 : 743-81-02195
통신판매업 신고번호 : 제 2022-충북청주-1278 호
고객센터 : 카카오톡채널 @yagom