[Rust 공식문서 한국어 정리] 108. Rust Sized 트레이트 가이드
[Rust 공식문서 한국어 정리] 108. Rust Sized 트레이트 가이드
원문 제목: Trait std::marker::Sized
작성자: The Rust Project
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 1. 서론 — 이 문서가 다루는 내용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Sized 트레이트가 제공하는 컴파일 타임 크기 확정 타입 표시를 상세히 다룹니다.
동적 크기 타입(DST)과의 차이, ?Sized 경계의 의미를 학습합니다.
Box, 슬라이스 [T] 등이 Sized가 아닌 이유를 정리합니다.
제네릭 함수에서 ?Sized를 사용하여 더 유연한 인자를 받는 방법을 설명합니다.
Rust 타입 시스템에서 Sized가 자동으로 부여되고 제약되는 원리를 다룹니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔑 2. 핵심 개념 4가지
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① Sized — 컴파일 타임에 크기가 확정된 타입
② DST — 동적 크기 타입(크기가 실행 시 결정)
③ ?Sized — Sized가 아닐 수도 있음을 허용하는 경계
④ 자동 제약 — 제네릭 T는 암묵적으로 Sized로 제약됨
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📖 3. 주요 내용 상세
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Sized 트레이트는 컴파일 타임에 타입의 크기가 알려져 있음을 표시합니다.
대부분의 타입은 Sized이며 이는 Rust의 기본 가정입니다.
제네릭 파라미터 T는 암묵적으로 T: Sized로 제약됩니다.
따라서 fn foo(x: T)에서 T는 자동으로 Sized입니다.
동적 크기 타입(DST)은 컴파일 타임에 크기를 알 수 없는 타입입니다.
슬라이스 [T]는 요소 개수를 모르므로 DST입니다.
trait 객체 dyn Trait는 구체 타입을 모르므로 DST입니다.
DST는 직접 변수로 사용할 수 없고 반드시 포인터 뒤에 있어야 합니다.
&[T], Box<[T]>, &dyn Trait, Box 등이 가능합니다.
?Sized 경계는 T가 Sized가 아닐 수도 있음을 허용합니다.
fn foo(x: &T)처럼 작성하면 슬라이스나 트레이트 객체를 인자로 받을 수 있습니다.
?Sized는 참조나 Box와 같은 포인터 타입 뒤에서만 사용할 수 있습니다.
값 타입 T는 항상 Sized여야 하므로 fn foo(x: T)는 컴파일 오류입니다.
Sized는 마커 트레이트로 개발자가 직접 구현하거나 구현하지 않을 수 없습니다.
컴파일러가 타입의 크기 확정 여부에 따라 자동으로 부여하거나 부여하지 않습니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🛠 4. 실전 활용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
제네릭 함수에서 &T 인자를 받을 때 T: ?Sized로 슬라이스도 처리합니다.
AsRef<[T]>를 구현할 때 ?Sized를 활용하여 다양한 타입을 수용합니다.
트레이트 객체를 사용할 때는 반드시 포인터(&, Box, Rc) 뒤에 배치합니다.
?Sized를 명시적으로 지정하여 API의 유연성을 높입니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 5. 정리
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Sized는 컴파일 타임 크기 확정을 표시하는 자동 마커 트레이트입니다.
DST는 포인터 뒤에서만 사용할 수 있으며 ?Sized로 제네릭에서 허용할 수 있습니다.
?Sized는 참조 기반 API의 유연성을 크게 향상시킵니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔗 출처 링크
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
원문: https://doc.rust-lang.org/std/marker/trait.Sized.html
DST 설명: https://doc.rust-lang.org/reference/dynamically-sized-types.html
#Rust #Sized #DST #동적크기타입 #번역

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