[Rust 공식문서 한국어 정리] 116. Rust Existential Types 가이드
[Rust 공식문서 한국어 정리] 116. Rust Existential Types 가이드
원문 제목: impl Trait
작성자: The Rust Project
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 1. 서론 — 이 문서가 다루는 내용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
impl Trait가 존재 타입(existential type)으로서의 의미를 상세히 다룹니다.
타입 시스템에서 존재 타입이 어떤 역할을 하는지 학습합니다.
impl Trait가 익명 타입 별칭으로 동작하는 원리를 정리합니다.
정적 디스패치와 동적 디스패치의 경계에서 impl Trait의 위치를 설명합니다.
impl Trait의 타입 추론과 한계, 그리고 미래 확장 방향을 다룹니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔑 2. 핵심 개념 4가지
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① 존재 타입 — 트레이트를 구현한 어떤 구체 타입이 존재함을 표현
② impl Trait — 특정 트레이트를 구현한 익명 구체 타입
③ 타입 은닉 — 구체 타입을 숨기고 트레이트 인터페이스만 노출
④ 단일 타입 제약 — impl Trait는 하나의 구체 타입으로 해결
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📖 3. 주요 내용 상세
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
impl Trait는 Rust의 존재 타입 표현 방식입니다.
존재 타입은 어떤 특정 타입이 존재함을 알리지만 그 타입이 무엇인지는 노출하지 않습니다.
fn foo() -> impl Trait는 이 함수가 Trait를 구현한 어떤 구체 타입을 반환함을 의미합니다.
호출자는 반환값이 특정 트레이트를 구현함을 알지만 구체 타입은 알 수 없습니다.
이는 API의 안정성을 높이고 구현 세부사항을 은닉하는 데 유용합니다.
impl Trait는 반환 지점에서 하나의 구체 타입으로 컴파일러가 확정합니다.
만약 여러 경로에서 다른 타입을 반환하면 컴파일 오류가 발생합니다.
이 경우 dyn Trait를 사용하여 동적 디스패치로 전환해야 합니다.
impl Trait는 타입 별칭에서도 사용될 수 있습니다.
type Foo = impl Trait;는 불투명 타입 별칭을 생성합니다.
이 타입 별칭은 구현 지점에서 구체 타입이 확정됩니다.
impl Trait는 async fn에서 Future 반환 타입을 간결하게 표현하는 데 필수적입니다.
async fn foo() -> i32는 실제로 fn foo() -> impl Future와 동일합니다.
impl Trait는 정적 디스패치를 유지하면서 구체 타입을 은닉하므로 성능 손실이 없습니다.
컴파일러는 반환 지점의 구체 타입을 알고 모노모피즘을 수행합니다.
impl Trait는 제네릭 타입 추론과 밀접하게 연관되어 있습니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🛠 4. 실전 활용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
반복자 체인 반환 시 impl Iterator로 내부 구현을 숨깁니다.
async fn으로 Future 반환의 보일러플레이트를 제거합니다.
타입 별칭으로 impl Trait를 사용하여 복잡한 반환 타입을 간결하게 표현합니다.
여러 타입 반환이 필요하면 dyn Trait로 동적 디스패치를 사용합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 5. 정리
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
impl Trait는 Rust의 존재 타입으로 구체 타입을 은닉합니다.
정적 디스패치를 유지하면서 API의 안정성을 높입니다.
async 함수와 복잡한 반복자 반환에서 필수적인 기능입니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔗 출처 링크
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
원문: https://doc.rust-lang.org/reference/types/impl-trait.html
Reference: https://doc.rust-lang.org/reference/
#Rust #ExistentialTypes #ImplTrait #타입은닉 #번역

오뉴노노 님의 최근 댓글
ㅋㅋㅋㅋㅋ 2019 01.14 잘 읽었습니다 2018 12.30 포인트가 없어서 아직 시작을 못하고있는데요! 글은 잘 읽었습니다! 포인트 쌓고 도전할거에요 2018 12.30