Borrowing

ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ ๊ฐ’์˜ ์†Œ์œ ๊ถŒ์„ ์ด๋™ํ•˜๋Š” ๋Œ€์‹ ์˜ ํ•จ์ˆ˜๊ฐ€ ๊ฐ’์„ _๋นŒ๋ ค_์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

Instead of transferring ownership when calling a function, you can let a function borrow the value:

#[derive(Debug)]
struct Point(i32, i32);

fn add(p1: &Point, p2: &Point) -> Point {
    Point(p1.0 + p2.0, p1.1 + p2.1)
}

fn main() {
    let p1 = Point(3, 4);
    let p2 = Point(10, 20);
    let p3 = add(&p1, &p2);
    println!("{p1:?} + {p2:?} = {p3:?}");
}
  • add ํ•จ์ˆ˜๋Š” ๋‘ Point๊ฐ์ฒด ๊ฐ’์„ _๋นŒ๋ ค_์˜ค์™€์„œ ์ƒˆ๋กœ์šด Point๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ํ˜ธ์ถœ์ž(main ํ•จ์ˆ˜)๋Š” ์—ฌ์ „ํžˆ p1, p2์˜ ์†Œ์œ ๊ถŒ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • The add function borrows two points and returns a new point.
  • The caller retains ownership of the inputs.