• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

trait를 인자로 받을 때 &impl과 &dyn차이

24.04.23 22:37 작성 조회수 46

1

Trait강좌에서 &impl만을 사용해 trait를 구현한 객체를 함수인자로 전달 받았는데 &dyn을 사용했을 때 차이가 궁금합니다.정적 디스패치, 동적 디스패치라고는 나오는데 &dyn이 들어가야하는 곳에 항상 &impl도 동작할 것 같아 어떤 예에서 &dyn을 사용해야 하는지 이해가 가지 않습니다 ㅠ강의 내용에는 나와있지 않은 부분이지만 강사님 경험상 dyn keyword를 사용해야만 하는 경우가 있으셨을까요?? 

답변 2

·

답변을 작성해보세요.

1

심도 깊은 질문 감사합니다. impl은 정적 디스패치라고, 컴파일 타임에 해당 트레이트를 구현한 구체적인 타입을 파악할 수 있는 경우이고, dyn같은 경우 동적으로 런타임에 파악하는 경우에 활용합니다. 전자는 컴파일타임에 구체적인 정보를 파악해야 하는 대신에 성능 페널티가 없고, 후자는 컴파일 타임에 미리 정해지지 않은 해당 트레이트 구현체를 활용할 수 있지만, 런타임에 해당 구현체를 쫓아가야 하는 부담이 있습니다.

해당 주제는 중급 강의에 잘 정리해볼게요.

수강 및 질문 감사드립니다.

밤털이님의 프로필

밤털이

질문자

2024.04.27

답변 감사합니다!

중급 강의도 기대하겠습니다 ㅎㅎ 덕분에 잘 이해가 됐습니다!

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.04.25

안녕하세요, 인프런 AI 인턴입니다.

제공된 정보에는 Rust의 &impl Trait&dyn Trait의 사용과 차이점에 대한 직접적인 내용이 포함되어 있지 않습니다. 따라서, 구체적인 예시나 내용으로 답변드리기 어렵습니다. 하지만, Rust에서 &impl Trait&dyn Trait의 차이를 간략하게 설명드릴 수 있습니다.

  • &impl Trait은 정적 디스패치를 사용합니다. 이는 컴파일 타임에 구체적인 타입이 결정되며, 각 타입 별로 별도의 함수 코드가 생성됩니다. 덕분에 실행 시점에서의 성능이 우수할 수 있으나, 컴파일된 코드의 크기가 증가할 수 있습니다.

  • &dyn Trait은 동적 디스패치를 사용합니다. 이 경우 컴파일 타임에는 구체적인 타입이 결정되지 않고, 런타임에 타입 정보를 확인하여 해당 기능을 실행합니다. 이로 인해 코드의 유연성은 증가하지만, 성능상의 오버헤드(예: 추가적인 indirection)가 발생할 수 있습니다.

&impl Trait&dyn Trait 중 어느 것을 사용할지는 상황에 따라 다릅니다. 예를 들어, 함수가 단일 타입의 인자만을 처리하면서 성능이 중요한 상황이라면 &impl Trait이 좋을 수 있습니다. 반대로, 여러 다른 타입의 객체들을 동일한 함수에서 처리해야 하고, 이 타입들이 모두 특정 트레잇을 구현하는 경우에는 &dyn Trait이 적합할 수 있습니다.

Rust의 공식 문서나 해당 주제에 관련된 추가 학습 자료를 참고하시는 것을 추천드립니다.