[Rust 공식문서 한국어 정리] 131. Rust Cow<T> 가이드
[Rust 공식문서 한국어 정리] 131. Rust Cow 가이드
원문 제목: Enum std::borrow::Cow
작성자: The Rust Project
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 1. 서론 — 이 문서가 다루는 내용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Cow가 제공하는 복제-온-라이트(clone-on-write) 스마트 포인터를 상세히 다룹니다.
Borrowed와 Owned 두 variant를 통한 지연 복제 전략을 학습합니다.
Cow를 사용하여 불필요한 할당을 피하면서도 소유 데이터를 제공하는 패턴을 정리합니다.
Cow가 ToOwned 트레이트와 연동되는 원리를 설명합니다.
문자열 처리, 설정값 파싱 등 Cow의 대표적 사용 사례를 다룹니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔑 2. 핵심 개념 4가지
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① Cow<'a, T> — Borrowed(&'a T) 또는 Owned(T::Owned)
② Clone-on-Write — 수정 시에만 소유 복제 발생
③ ToOwned — T가 ToOwned를 구현해야 Cow 사용 가능
④ 지연 복제 — 읽기 전용 시에는 참조만 사용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📖 3. 주요 내용 상세
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Cow는 Clone-on-Write의 약자로 지연 복제 전략을 구현합니다.
Cow<'a, T>는 두 가지 상태를 가집니다.
Borrowed(&'a T)는 내부 데이터를 참조로 빌립니다.
Owned(T::Owned)는 내부 데이터를 소유합니다.
T는 ToOwned를 구현해야 하며 T::Owned가 소유 타입입니다.
Cow::Borrowed(&data)로 참조 상태로 생성합니다.
Cow::Owned(data)로 소유 상태로 생성합니다.
into_owned()는 Cow를 소유 데이터로 변환합니다.
to_mut()은 수정이 필요할 때만 소유 복제를 수행합니다.
Borrowed 상태에서 to_mut()을 호출하면 참조를 복제하여 Owned로 전환합니다.
이미 Owned 상태이면 추가 복제 없이 가변 참조를 반환합니다.
이 덕분에 읽기 전용 코드 경로에서는 할당이 전혀 발생하지 않습니다.
Cow<'_, str>는 문자열 처리에서 가장 흔하게 사용됩니다.
입력이 수정이 필요 없으면 &str를 그대로 사용하고 수정이 필요하면 String으로 복제됩니다.
Cow::from(&str)은 Borrowed 상태를 생성합니다.
Cow는 Deref를 구현하므로 내부 데이터의 메서드를 직접 호출할 수 있습니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🛠 4. 실전 활용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
문자열 함수에서 Cow<'_, str>를 반환하여 입력 수정 여부에 따라 &str 또는 String을 반환합니다.
설정값 처리에서 기본값은 참조로 사용하고 오버라이드 시에만 소유 복제합니다.
escape 함수에서 이스케이프가 필요 없으면 원본 참조, 필요하면 새 String을 반환합니다.
API 설계 시 Cow 반환으로 호출자의 할당 부담을 줄입니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 5. 정리
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Cow는 지연 복제로 불필요한 할당을 피하면서도 소유 데이터를 제공합니다.
읽기 전용 시에는 참조만 사용하고 수정 시에만 소유 복제가 발생합니다.
문자열 처리와 설정값 파싱에서 메모리 효율성을 크게 향상시킵니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔗 출처 링크
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
원문: https://doc.rust-lang.org/std/borrow/enum.Cow.html
ToOwned: https://doc.rust-lang.org/std/borrow/trait.ToOwned.html
#Rust #Cow #CloneOnWrite #지연복제 #번역

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