[Rust 공식문서 한국어 정리] 97. Rust Borrow/BorrowMut 트레이트 가이드
[Rust 공식문서 한국어 정리] 97. Rust Borrow/BorrowMut 트레이트 가이드
원문 제목: Trait std::borrow::Borrow
작성자: The Rust Project
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 1. 서론 — 이 문서가 다루는 내용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Borrow와 BorrowMut 트레이트가 제공하는 동등성 보장 참조 변환을 설명합니다.
HashMap 키 검색 등에서 소유 데이터와 참조 데이터의 동등성을 처리하는 원리를 학습합니다.
Borrow와 AsRef의 중요한 차이점인 동등성 보장 요구사항을 정리합니다.
컬렉션의 get 메서드 등이 Borrow를 활용하는 방식을 다룹니다.
타입의 소유 버전과 참조 버전이 동일하게 해싱되고 비교되어야 할 때의 사용법을 설명합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔑 2. 핵심 개념 4가지
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① Borrow — &self를 &T로 변환하며 동등성과 해시값 보장
② BorrowMut — 가변 참조 변환 및 동등성 보장
③ 동등성 보장 — x.borrow() == y.borrow()가 x == y와 일치
④ HashMap 키 검색 — String 키로 &str 검색 가능
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📖 3. 주요 내용 상세
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Borrow 트레이트는 값의 참조를 다른 타입으로 변환하면서 추가 계약을 보장합니다.
Borrow 계약에 따르면 x.borrow() == y.borrow()는 항상 x == y와 동일한 결과를 내야 합니다.
마찬가지로 Hash는 borrow한 결과의 해시값이 소유 값의 해시값과 같아야 합니다.
이 계약은 HashMap::get 등에서 소유 키 타입으로 참조 타입을 검색할 수 있게 합니다.
String은 Borrow을 구현하므로 HashMap를 &str로 검색할 수 있습니다.
Vec는 Borrow<[T]>를 구현하여 슬라이스로 검색하거나 비교할 수 있습니다.
AsRef는 단순 참조 변환이지만 Borrow는 동등성과 해시 일관성까지 보장합니다.
따라서 Borrow는 컬렉션 키 검색에만 적합하고 일반 변환에는 AsRef가 더 유연합니다.
BorrowMut는 Borrow의 가변 버전으로 &mut self를 &mut T로 변환합니다.
borrow 메서드는 &self를 소비하지 않고 참조만 반환합니다.
커스텀 타입을 HashMap의 키로 사용할 때 Borrow를 구현하면 다양한 타입으로 검색 가능합니다.
예를 들어 사용자 정의 ID 타입이 &str을 내부에 포함하면 Borrow을 구현할 수 있습니다.
Eq와 Hash가 borrow 결과에 일관되게 구현되어 있어야 Borrow 계약이 성립합니다.
Cow는 Borrow를 통해 내부 데이터를 참조로 노출할 수 있습니다.
표준 라이브러리의 대부분 소유 타입은 대응되는 참조 타입에 Borrow를 구현합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🛠 4. 실전 활용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
HashMap를 선언하고 map.get("key")로 &str로 검색합니다.
커스텀 키 타입에 Borrow을 구현하면 문자열 리터럴로 바로 조회합니다.
BorrowMut로 가변 컬렉션의 내부 요소를 안전하게 수정합니다.
AsRef와 Borrow의 차이를 이해하고 컬렉션 키 검색에는 Borrow를 사용합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 5. 정리
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Borrow는 참조 변환에 동등성과 해시 일관성 계약을 추가합니다.
HashMap, BTreeMap 등의 키 검색이 Borrow 덕분에 유연해집니다.
AsRef보다 강력한 제약을 가지므로 사용 목적을 명확히 해야 합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔗 출처 링크
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
원문: https://doc.rust-lang.org/std/borrow/trait.Borrow.html
BorrowMut: https://doc.rust-lang.org/std/borrow/trait.BorrowMut.html
#Rust #Borrow #BorrowMut #동등성 #번역

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