๋ณตํฉ ํ์
์ด๋์ด ๊ธฐ๋ณธ ์ค์ ์ด์ง๋ง, ํน์ ํ์ ์ ๋ณต์ฌ๋ฉ๋๋ค:
fn main() { let x = 42; let y = x; println!("x: {x}"); // would not be accessible if not Copy println!("y: {y}"); }
์ด๋ฌํ ํ์
๋ค์ Copy
ํธ๋ ์์ ๊ตฌํํฉ๋๋ค.
์ง์ ๋ง๋ ํ์
๋ค๋ Copy
ํธ๋ ์์ ๊ตฌํํ์ฌ ๋ณต์ฌ๋ฅผ ํ ์ ์์ต๋๋ค:
#[derive(Copy, Clone, Debug)] struct Point(i32, i32); fn main() { let p1 = Point(3, 4); let p2 = p1; println!("p1: {p1:?}"); println!("p2: {p2:?}"); }
- ํ ๋น ํ,
p1
์p2
๋ ์์ ์ ๋ฐ์ดํฐ๋ฅผ ์์ ํฉ๋๋ค. - ๋ช
์์ ์ผ๋ก
p1.clone()
๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ ์ ์์ต๋๋ค.
This slide should take about 5 minutes.
๋ณต์ฌ(copy)์ ๋ณต์ (clone)๋ ๊ฐ์ง ์์ต๋๋ค:
- ๋ณต์ฌ๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ด์ฉ์ ๊ทธ๋๋ก ํ ๋ฒ ๋ ๋ง๋๋ ๊ฒ์ ์๋ฏธํ๋ฉฐ, ์๋ฌด ๊ฐ์ฒด์์๋ ๋ค ์ง์ํ์ง๋ ์์ต๋๋ค.
- ๋ณต์ฌ๋ ์ปค์คํฐ๋ง์ด์ฆ ํ ์ ์์ต๋๋ค. (C++์์ ๋ณต์ฌ ์์ฑ์๋ฅผ ํตํด ๋ณต์ฌ ๋์์ ์์๋ก ๊ตฌํํ ์ ์๋ ๊ฒ๊ณผ ๋น๊ต๊ฐ ๋ฉ๋๋ค.)
- ๋ณต์ ๋ ๋ณด๋ค ์ผ๋ฐ์ ์ธ ์์
์ด๋ฉฐ,
Clone
ํธ๋ ์์ ๊ตฌํํ์ฌ ๋ณต์ ์ ๋์์ ์ปค์คํฐ๋ง์ด์ฆ ํ ์ ์์ต๋๋ค. Drop
ํธ๋ ์์ ๊ตฌํํ ํ์ ์ ๋ณต์ฌ๋์ง ์์ต๋๋ค.
์์ ์์์์ ๋ค์์ ์๋ํด ๋ณด์๊ธฐ ๋ฐ๋๋๋ค:
Point
๊ตฌ์กฐ์ฒด์String
ํ๋๋ฅผ ์ถ๊ฐํ์ธ์. ์ปดํ์ผ ๋์ง ์์ ๊ฒ์ ๋๋ค. ์๋ํ๋ฉดString
์Copy
ํธ๋ ์์ ๊ตฌํํ๊ณ ์์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค.- Remove
Copy
from thederive
attribute. The compiler error is now in theprintln!
forp1
. p1
์ ๋ณต์ ํ๋ฉด ์ ๋์ํจ์ ํ์ธํด ๋ณด์ธ์.