Ownership (Rust)

๋ฉ”์†Œ๋“œ์˜ self, &self, &mut self

  • self - ํ•จ์ˆ˜๊ฐ€ ๊ฐ’์„ ์†Œ๋ชจํ•˜๋Š” ๊ฒฝ์šฐ. ์˜ค๋„ˆ์‹ญ์„ ๋ฐ›๋Š”๋‹ค. (move)
  • &self - ํ•จ์ˆ˜๊ฐ€ ๊ฐ’์„ ์ฝ๊ธฐ๋งŒ ํ•˜๋Š” ๊ฒฝ์šฐ. ์ฐธ์กฐ๋งŒ ๋ฐ›๋Š”๋‹ค. (borrow)
  • &mut self - ํ•จ์ˆ˜๊ฐ€ ๊ฐ’์„ ์†Œ๋ชจํ•˜์ง€ ์•Š๊ณ  ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ. ๊ฐ€๋ณ€์ฐธ์กฐ๋ฅผ ๋ฐ›๋Š”๋‹ค. (borrow)

ํ•จ์ˆ˜์—์„œ ์ฐธ์กฐ ๋ฐ˜ํ™˜ํ•˜๊ธฐ

  • ํ•จ์ˆ˜์—์„œ ์ฐธ์กฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ ค ํ•˜๋ฉด ์‹คํŒจํ•œ๋‹ค.
fn try_create<'a>() -> &'a String {
    &String::new()
}
  • ํ•จ์ˆ˜ ๋‚ด์—์„œ ๋งŒ๋“  ์ž„์‹œ ๊ฐ’์˜ ์˜ค๋„ˆ์‹ญ์„ ํ•จ์ˆ˜๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ํ•จ์ˆ˜๊ฐ€ ๋๋‚  ๋•Œ ์ž„์‹œ ๊ฐ’์€ ๋“œ๋ž๋˜๊ณ , ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‚ฌ๋ผ์ง„๋‹ค.
  • ๋”ฐ๋ผ์„œ ๋ฐ˜ํ™”ํ•˜๋ ค๋˜ ์ฐธ์กฐ๋Š” ๋Œ•๊ธ€๋ง ์ฐธ์กฐ(Dangling reference)๊ฐ€ ๋œ๋‹ค.
error[E0515]: cannot return reference to temporary value
 --> src/lib.rs:2:5
  |
2 |     &String::new()
  |     ^-------------
  |     ||
  |     |temporary value created here
  |     returns a reference to data owned by the current function
  • ํ•จ์ˆ˜ ๋‚ด์—์„œ ๋งŒ๋“  ์ž„์‹œ ๊ฐ’์˜ ์ฐธ์กฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

์ฐธ๊ณ ์ž๋ฃŒ

์ด ๋ฌธ์„œ๋ฅผ ์ธ์šฉํ•œ ๋ฌธ์„œ