๊ณต์œ  ์ฐธ์กฐ

์ฐธ์กฐ๋Š” ๊ฐ’์— ๋Œ€ํ•œ ์ฑ…์ž„์„ ์ง€์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ๊ฐ’์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋ฉฐ โ€™๋นŒ๋ฆผโ€™์ด๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๊ณต์œ  ์ฐธ์กฐ๋Š” ์ฝ๊ธฐ ์ „์šฉ์ด๋ฉฐ ์ฐธ์กฐ๋œ ๋ฐ์ดํ„ฐ๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

fn main() {
    let a = 'A';
    let b = 'B';
    let mut r: &char = &a;
    println!("r: {}", *r);
    r = &b;
    println!("r: {}", *r);
}

T ํƒ€์ž…์— ๋Œ€ํ•œ ๊ณต์œ  ์ฐธ์กฐ๋Š” &T ํƒ€์ž…์„ ๊ฐ–์Šต๋‹ˆ๋‹ค. ์ฐธ์กฐ ๊ฐ’์€ & ์—ฐ์‚ฐ์ž๋กœ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค. * ์—ฐ์‚ฐ์ž๋Š” ์ฐธ์กฐ๋ฅผ โ€™์—ญ์ฐธ์กฐโ€™ํ•˜์—ฌ ๊ฐ’์„ ์‚ฐ์ถœํ•ฉ๋‹ˆ๋‹ค.

๋Ÿฌ์ŠคํŠธ๋Š” ํ—ˆ์ƒ(dangling) ์ฐธ์กฐ๋ฅผ ์ปดํŒŒ์ผ๋Ÿฌ ๋‹จ๊ณ„์—์„œ ์ฐพ์•„๋‚ด๊ณ  ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค:

fn x_axis(x: i32) -> &(i32, i32) {
    let point = (x, 0);
    return &point;
}
This slide should take about 10 minutes.
  • ์ฐธ์กฐ๋Š” ์ฐธ์กฐ๋˜๋Š” ๊ฐ’์„ โ€™๋นŒ๋ฆฐ๋‹คโ€™๊ณ  ํ•˜๋ฉฐ, ์ด๋Š” ํฌ์ธํ„ฐ์— ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ํ•™์ƒ๋“ค์—๊ฒŒ ์ข‹์€ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ์—์„œ๋Š” ์ฐธ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ’์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์›๋ž˜ ๋ณ€์ˆ˜๊ฐ€ ๊ฐ’์„ โ€™์†Œ์œ โ€™ํ•ฉ๋‹ˆ๋‹ค. ์†Œ์œ ๊ถŒ์— ๊ด€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ 3์ผ ์ฐจ์— ๋‹ค๋ฃน๋‹ˆ๋‹ค.

  • ์ฐธ์กฐ๋Š” ํฌ์ธํ„ฐ๋กœ ๊ตฌํ˜„๋˜๋ฉฐ ์ฃผ์š” ์ด์ ์€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋Œ€์ƒ๋ณด๋‹ค ํ›จ์”ฌ ์ž‘์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. C ๋˜๋Š” C++์— ์ต์ˆ™ํ•œ ํ•™์ƒ์€ ์ฐธ์กฐ๋ฅผ ํฌ์ธํ„ฐ๋กœ ์ธ์‹ํ•ฉ๋‹ˆ๋‹ค. ๊ณผ์ •์˜ ํ›„๋ฐ˜๋ถ€์—์„œ๋Š” Rust๊ฐ€ ์›์‹œ ํฌ์ธํ„ฐ ์‚ฌ์šฉ์—์„œ ๋น„๋กฏ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ „ ๋ฒ„๊ทธ๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

  • Rust๋Š” ์ฐธ์กฐ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. &๊ฐ€ ํ•ญ์ƒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • Rust will auto-dereference in some cases, in particular when invoking methods (try r.is_ascii()). There is no need for an -> operator like in C++.

  • ์ด ์˜ˆ์—์„œ r์€ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ๋‹ค์‹œ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(r = &b). ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด r์ด ๋‹ค์‹œ ๋ฐ”์ธ๋”ฉ๋˜์–ด ๋‹ค๋ฅธ ๊ฒƒ์„ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ฐธ์กฐ์— ํ• ๋‹นํ•˜๋ฉด ์ฐธ์กฐ๋œ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋Š” C++์™€๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

  • ๊ณต์œ  ์ฐธ์กฐ์—์„œ๋Š” ์ฐธ์กฐ ๊ฐ’์ด ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•˜๋”๋ผ๋„ ์ด๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. *r = 'X'๋ฅผ ์ž…๋ ฅํ•ด ๋ณด์„ธ์š”.

  • Rust๋Š” ๋ชจ๋“  ์ฐธ์กฐ์˜ ์ „์ฒด ๊ธฐ๊ฐ„์„ ์ถ”์ ํ•˜์—ฌ ์ถฉ๋ถ„ํžˆ ์˜ค๋ž˜ ์ง€์†๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์•ˆ์ „ํ•œ Rust์—์„œ๋Š” ๋Œ•๊ธ€๋ง ์ฐธ์กฐ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. x_axis๋Š” point์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ point๋Š” ํ•จ์ˆ˜๊ฐ€ ๋ฐ˜ํ™˜๋˜๋ฉด ํ• ๋‹น์ด ํ•ด์ œ๋˜๋ฏ€๋กœ ์ปดํŒŒ์ผ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ์†Œ์œ ๊ถŒ์— ๋Œ€ํ•œ ์ฃผ์ œ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์ด ๋นŒ๋ฆผ์— ๋Œ€ํ•ด ๋” ์ž์„ธํžˆ ์ด์•ผ๊ธฐ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.