๊ณต์ ์ฐธ์กฐ
์ฐธ์กฐ๋ ๊ฐ์ ๋ํ ์ฑ ์์ ์ง์ง ์๊ณ ๋ค๋ฅธ ๊ฐ์ ์ก์ธ์คํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ฉฐ โ๋น๋ฆผโ์ด๋ผ๊ณ ๋ ํฉ๋๋ค. ๊ณต์ ์ฐธ์กฐ๋ ์ฝ๊ธฐ ์ ์ฉ์ด๋ฉฐ ์ฐธ์กฐ๋ ๋ฐ์ดํฐ๋ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
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; }
-
์ฐธ์กฐ๋ ์ฐธ์กฐ๋๋ ๊ฐ์ โ๋น๋ฆฐ๋คโ๊ณ ํ๋ฉฐ, ์ด๋ ํฌ์ธํฐ์ ์ต์ํ์ง ์์ ํ์๋ค์๊ฒ ์ข์ ๋ชจ๋ธ์ ๋๋ค. ์ฝ๋์์๋ ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ์ก์ธ์คํ ์ ์์ง๋ง ์ฌ์ ํ ์๋ ๋ณ์๊ฐ ๊ฐ์ โ์์ โํฉ๋๋ค. ์์ ๊ถ์ ๊ดํ ์์ธํ ๋ด์ฉ์ 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
๋ ํจ์๊ฐ ๋ฐํ๋๋ฉด ํ ๋น์ด ํด์ ๋๋ฏ๋ก ์ปดํ์ผ๋์ง ์์ต๋๋ค. -
์์ ๊ถ์ ๋ํ ์ฃผ์ ๋ฅผ ๋ค๋ฃฐ ๋ ์ด ๋น๋ฆผ์ ๋ํด ๋ ์์ธํ ์ด์ผ๊ธฐ ํ๊ฒ ์ต๋๋ค.