[Rust 공식문서 한국어 정리] 98. Rust ToOwned 트레이트 가이드
[Rust 공식문서 한국어 정리] 98. Rust ToOwned 트레이트 가이드
원문 제목: Trait std::borrow::ToOwned
작성자: The Rust Project
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 1. 서론 — 이 문서가 다루는 내용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ToOwned 트레이트가 제공하는 참조에서 소유 데이터로 복제하는 메커니즘을 설명합니다.
Clone과의 차이점, Borrow와의 관계를 명확히 정리합니다.
슬라이스나 참조 타입에서 소유 타입을 생성하는 일반적인 패턴을 학습합니다.
Cow::to_mut 등에서 ToOwned가 어떻게 활용되는지 다룹니다.
커스텀 타입에 ToOwned를 구현하여 소유 복제를 일반화하는 방법을 설명합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔑 2. 핵심 개념 4가지
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① to_owned — 참조 타입에서 대응하는 소유 타입을 생성
② Borrow와의 관계 — Borrow가 있으면 ToOwned로 연결
③ Clone과의 차이 — Clone은 동일 타입 복제, ToOwned는 다른 타입 생성
④ Owned 연관 타입 — 복제 결과의 소유 타입 지정
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📖 3. 주요 내용 상세
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ToOwned 트레이트는 참조나 슬라이스에서 소유 데이터를 만들어내는 기능을 추상화합니다.
to_owned 메서드는 &self를 소비하여 Owned 타입의 값을 반환합니다.
str에 대한 ToOwned 구현은 String을 생성하므로 "hello".to_owned()는 String입니다.
[T]에 대한 ToOwned 구현은 Vec를 생성합니다.
Clone은 동일한 타입 T에서 T를 만들지만 ToOwned는 참조에서 소유 타입을 만듭니다.
ToOwned를 구현하려면 Borrow 트레이트와 연관된 Owned 타입을 지정해야 합니다.
Cow::Borrowed는 ToOwned를 통해 내부 참조를 필요할 때 소유 데이터로 변환합니다.
to_mut 메서드는 Cow가 Borrowed 상태일 때 to_owned를 호출하여 소유 상태로 전환합니다.
Path는 ToOwned를 구현하여 PathBuf를 생성합니다.
OsStr은 ToOwned를 구현하여 OsString을 생성합니다.
CStr은 ToOwned를 구현하여 CString을 생성합니다.
표준 라이브러리의 대부분의 참조/슬라이스 타입은 ToOwned를 구현합니다.
ToOwned는 제네릭 함수에서 참조 인자를 받아 소유 데이터를 반환할 때 유용합니다.
Clone과 마찬가지로 ToOwned도 값을 복제하므로 비용이 발생할 수 있습니다.
Cow를 사용하면 불필요한 복제를 피하고 필요할 때만 소유 데이터를 생성할 수 있습니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🛠 4. 실전 활용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
&str을 String으로 복제할 때 to_owned()를 사용합니다.
Cow::Borrowed 데이터를 수정할 때 to_mut()로 소유 복제를 지연합니다.
제네릭 함수에서 ToOwned 제약으로 참조와 소유 데이터를 통일해서 처리합니다.
Borrowed 데이터를 소유해야 할 때 Clone 대신 ToOwned를 사용하여 의도를 명확히 합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 5. 정리
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ToOwned는 참조에서 소유 타입으로의 복제를 추상화합니다.
str->String, [T]->Vec 등 표준 변환이 일관된 인터페이스로 제공됩니다.
Cow와 함께 사용하면 불필요한 할당을 피하면서도 유연성을 유지할 수 있습니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔗 출처 링크
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
원문: https://doc.rust-lang.org/std/borrow/trait.ToOwned.html
Cow: https://doc.rust-lang.org/std/borrow/enum.Cow.html
#Rust #ToOwned #소유복제 #Cow #번역

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