[Rust 공식문서 한국어 정리] 100. Rust Deref/DerefMut 트레이트 가이드
[Rust 공식문서 한국어 정리] 100. Rust Deref/DerefMut 트레이트 가이드
원문 제목: Trait std::ops::Deref
작성자: The Rust Project
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 1. 서론 — 이 문서가 다루는 내용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Deref와 DerefMut 트레이트가 제공하는 암묵적 역참조 메커니즘을 상세히 다룹니다.
스마트 포인터 패턴의 핵심으로 동작하는 원리를 학습합니다.
역참조 강제 변환(deref coercion)이 메서드 해석에 미치는 영향을 정리합니다.
Box, Rc, Arc 등 표준 스마트 포인터에서의 활용을 설명합니다.
Deref를 구현할 때 안전성과 API 설계 측면의 주의사항을 다룹니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔑 2. 핵심 개념 4가지
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① Deref — *x 연산자와 암묵적 역참조 제공
② DerefMut — 가변 암묵적 역참조 제공
③ 역참조 강제 변환 — 컴파일러가 자동으로 &T를 &U로 변환
④ 스마트 포인터 — 소유권 관리와 역참조의 결합
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📖 3. 주요 내용 상세
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Deref 트레이트는 deref 메서드를 구현하여 * 연산자의 동작을 커스터마이즈합니다.
deref 메서드는 &Self::Target을 반환하여 내부 데이터에 대한 참조를 제공합니다.
DerefMut는 Deref를 상속하며 가변 역참조 *mut x를 지원합니다.
암묵적 역참조 강제 변환은 컴파일러가 &T를 &U로 자동 변환하는 기능입니다.
이 변환은 Deref를 구현한 T에 대해 발생합니다.
예를 들어 &Box은 Deref를 통해 자동으로 &String으로 변환됩니다.
이 변환은 메서드 호출 시나 함수 인자 전달 시에도 적용됩니다.
Box는 Deref를 구현하여 Box 안의 값을 직접 접근할 수 있습니다.
Rc와 Arc도 Deref를 구현하여 참조 카운팅 포인터를 투명하게 사용합니다.
Vec는 Deref를 구현하여 슬라이스 메서드를 직접 호출합니다.
String은 Deref을 구현하여 str의 메서드를 직접 사용합니다.
DerefMut를 구현하려면 먼저 Deref를 구현해야 합니다.
DerefMut는 내부 가변성과 관련하여 추가적인 안전성 검증이 필요합니다.
역참조 강제 변환은 &mut T에서 &mut U로도 적용됩니다.
그러나 &mut T에서 &U로의 변환은 불변 참조로의 강제 변환 규칙에 따라 가능합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🛠 4. 실전 활용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
커스텀 스마트 포인터에 Deref를 구현하여 내부 데이터를 투명하게 노출합니다.
DerefMut를 구현하여 스마트 포인터를 통해 내부 데이터를 수정할 수 있게 합니다.
String을 &str 함수에 직접 전달하여 편리한 API를 구성합니다.
Box, Rc, Arc 등 표준 타입의 Deref 구현 방식을 참고하여 설계합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 5. 정리
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Deref/DerefMut는 암묵적 역참조와 스마트 포인터 패턴의 핵심입니다.
역참조 강제 변환 덕분에 스마트 포인터도 원시 참조처럼 자연스럽게 사용됩니다.
적절한 구현은 API의 사용성을 크게 향상시킵니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔗 출처 링크
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
원문: https://doc.rust-lang.org/std/ops/trait.Deref.html
DerefMut: https://doc.rust-lang.org/std/ops/trait.DerefMut.html
#Rust #Deref #DerefMut #스마트포인터 #번역

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