inflearn logo
강의

Course

Instructor

Introduction to and use of Rust, an elegant, high-performance programming language

Trait | Limiting the scope of a generic type

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

Resolved

366

16326916857

3 asked

1

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

rust

Answer 2

1

hatemogi

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

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

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

1

16326916857

답변 감사합니다!

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

0

communityai8509

안녕하세요, 인프런 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의 공식 문서나 해당 주제에 관련된 추가 학습 자료를 참고하시는 것을 추천드립니다.

다음강의 플랜이 어떻게 되실까요?

0

35

1

소스코드

0

32

1

강의 자료 ppt나 pdf 파일은 없을까요?

0

69

1

선생님 ppt자료를 받아서 공부하고 싶습니다.

0

52

2

Rust는 어떻게 컴파일 타임에 dangling reference를 막나요?

0

70

2

강의 추가 계획 질문

0

76

2

가변 참조에 대한 주요 제약사항 퀴즈 문의

0

66

2

소유권 이전과 관련된 질문입니다

0

148

2

&r1 을 써야하는지 r1을 써야하는지?

1

120

1

임대값 수명에 대한 질문

1

122

1

튜플 구조체에서 println! 사용시 에러가 발생합니다.

0

166

1

메모리 관리규칙에서 질문드립니다.

1

210

1

튜플과 구조체 차이 설명에 관한 질문

0

377

1

튜플과 배열 강의 4:50에서 벡터 나중에 설명해주신다고 하셨는데

0

193

1

구조체는 언제나 Heap에 저장되나요??

2

418

2

Lifecycle 강의에서 두 문자열 슬라이스를 비교해 긴 문자열 슬라이스를 리턴하는 것 관련 질문

0

268

1

혹시 어떤 폰트일까요?

0

457

2

build 오류

0

403

1

웹 어플리케이션 개발에도 잘 사용되나요?

1

458

1

임대값의 수명 강의가 재생이 안되고 있습니다~

0

413

3

임대값의 수명에 대한 강의는 언제쯤 볼 수 있을까요?

0

350

2

문자열 리터럴이 너무 어려워요ㅠㅠ

1

556

1

Integer는 자동으로 copy되서(copy type)(integer 는 stack에 할당되서)

0

367

2

명령어를 입력 한 후 source "$HOME/.cargo/env" 이 명령어를 입력해야 합니다.

0

337

2