[Rust 공식문서 한국어 정리] 107. Rust Copy/Clone 트레이트 가이드
[Rust 공식문서 한국어 정리] 107. Rust Copy/Clone 트레이트 가이드
원문 제목: Trait std::marker::Copy
작성자: The Rust Project
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 1. 서론 — 이 문서가 다루는 내용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Copy와 Clone 트레이트가 제공하는 복제 메커니즘의 차이를 상세히 다룹니다.
비트 단위 복사와 명시적 복제의 의미와 성능 차이를 학습합니다.
어떤 타입이 Copy가 될 수 있는지의 조건과 제약을 정리합니다.
소유권 이동과 Copy의 상호작용, 암묵적 복사가 발생하는 상황을 설명합니다.
커스텀 타입에 Copy와 Clone을 구현하는 방법과 주의사항을 다룹니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔑 2. 핵심 개념 4가지
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① Copy — 비트 단위 복사로 암묵적 복제가 가능한 타입 표시
② Clone — 명시적 복제 메서드 clone 제공
③ Copy의 조건 — 모든 필드가 Copy이고 Drop 미구현
④ #[derive(Copy, Clone)] — 두 트레이트를 자동 구현
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📖 3. 주요 내용 상세
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Copy 트레이트는 값이 할당이나 전달 시 암묵적으로 비트 단위 복사됨을 나타냅니다.
Copy가 구현된 타입은 대입 후에도 원본 변수를 계속 사용할 수 있습니다.
Clone 트레이트는 clone() 메서드를 호출하여 명시적으로 복제합니다.
Copy를 구현하려면 먼저 Clone을 구현해야 합니다.
Copy는 비트 단위 복사만으로 안전해야 하므로 힙 할당이나 파일 핸들을 포함하면 안 됩니다.
따라서 String, Vec, Box는 Copy가 아니고 Clone만 구현합니다.
정수, 부동소수점, bool, char, 참조 타입(&T)은 Copy를 구현합니다.
배열 [T; N]은 T가 Copy이면 Copy이고 튜플도 모든 요소가 Copy이면 Copy입니다.
Drop을 구현한 타입은 Copy를 구현할 수 없습니다.
이는 이중 해제를 방지하기 위한 컴파일러 제약입니다.
#[derive(Copy, Clone)]으로 두 트레이트를 동시에 자동 구현할 수 있습니다.
Copy가 있는 타입은 .clone()을 호출할 필요 없이 암묵적 복사가 됩니다.
함수 인자로 전달할 때 Copy 타입은 이동 대신 복사가 발생합니다.
let y = x;에서 x가 Copy이면 x는 여전히 유효하고 y는 복사본을 가집니다.
Rc나 Arc는 Clone을 구현하여 참조 카운트를 증가시키는 복제를 수행합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🛠 4. 실전 활용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
단순한 값 타입은 #[derive(Copy, Clone)]로 복제를 편리하게 만듭니다.
힙 데이터를 포함하는 타입은 Clone만 구현하고 복제 비용을 명시적으로 드러냅니다.
함수 인자로 Copy 타입을 사용하면 호출 후에도 원본을 계속 사용할 수 있습니다.
Rc::clone으로 참조 카운트를 증가시키며 여러 소유자를 공유합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 5. 정리
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Copy는 암묵적 비트 복사, Clone은 명시적 복제입니다.
Copy는 단순한 값 타입에만 적용되며 힙 데이터가 있으면 Clone만 사용합니다.
두 트레이트의 차이를 이해하면 소유권 모델을 더 정확히 활용할 수 있습니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔗 출처 링크
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
원문: https://doc.rust-lang.org/std/marker/trait.Copy.html
Clone Trait: https://doc.rust-lang.org/std/clone/trait.Clone.html
#Rust #Copy #Clone #복제 #번역

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