๊ฐ๋น์ง ์ปฌ๋ ์ ์์ด ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ์ ํ๋ณดํ๋ Rust์ ๋ ํนํ ์ ๊ทผ ๋ฐฉ์์ ์ดํด๋ณด์ธ์. Rust์ ์์ ๊ถ ๋ฐ ์ฐจ์ฉ ์์คํ ์ด ์ผ๋ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ๊ณ ๊ฐ๋ ฅํ๊ณ ๊ณ ์ฑ๋ฅ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์ฅํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์ธ์.
Rust ํ๋ก๊ทธ๋๋ฐ: ๊ฐ๋น์ง ์ปฌ๋ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ์์
์์คํ ํ๋ก๊ทธ๋๋ฐ ์ธ๊ณ์์ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ์ ํ๋ณดํ๋ ๊ฒ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ ํต์ ์ผ๋ก, ์ธ์ด๋ ๊ฐ๋น์ง ์ปฌ๋ ์ (GC)์ ์์กดํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐ ๋๊ธ๋ง ํฌ์ธํฐ์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํด ์์ต๋๋ค. ๊ทธ๋ฌ๋ GC๋ ์ฑ๋ฅ ์ค๋ฒํค๋์ ์์ธก ๋ถ๊ฐ๋ฅ์ฑ์ ์ด๋ํ ์ ์์ต๋๋ค. ํ๋์ ์ธ ์์คํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ธ Rust๋ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ์ทจํฉ๋๋ค. ์ฆ, ๊ฐ๋น์ง ์ปฌ๋ ์ ์์ด ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ์ ๋ณด์ฅํฉ๋๋ค. ์ด๋ ํ์ ์ ์ธ ์์ ๊ถ ๋ฐ ์ฐจ์ฉ ์์คํ ์ ํตํด ๋ฌ์ฑ๋๋ฉฐ, ์ด๋ Rust๋ฅผ ๋ค๋ฅธ ์ธ์ด์ ๊ตฌ๋ณํ๋ ํต์ฌ ๊ฐ๋ ์ ๋๋ค.
์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฐ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋ฌธ์ ์
Rust์ ์๋ฃจ์ ์ ๋ํด ์์๋ณด๊ธฐ ์ ์, ๊ธฐ์กด์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฐฉ์๊ณผ ๊ด๋ จ๋ ๋ฌธ์ ์ ์ ์ดํดํด ๋ณด๊ฒ ์ต๋๋ค.
์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ (C/C++)
C ๋ฐ C++์ ๊ฐ์ ์ธ์ด๋ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ์์๊ฒ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฐ ํด์ ์ ๋ํ ์ธ๋ฐํ ์ ์ด๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด ์ ์ด๋ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์ต์ ์ ์ฑ๋ฅ์ ๋ผ ์ ์์ง๋ง, ๋ค์๊ณผ ๊ฐ์ ์๋นํ ์ํ๋ ๋ฐ๋ฆ ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ๋์: ๋ ์ด์ ํ์ํ์ง ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ ๊ฒ์ ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ์ฐจ ์๋ชจ๋๊ณ ์ ์ฌ์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ถฉ๋ํ ์ ์์ต๋๋ค.
- ๋๊ธ๋ง ํฌ์ธํฐ: ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ๋ ํ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์๋์ง ์์ ๋์์ด ๋ฐ์ํ์ฌ ์ข ์ข ์ถฉ๋ ๋๋ ๋ณด์ ์ทจ์ฝ์ฑ์ผ๋ก ์ด์ด์ง๋๋ค.
- ์ด์ค ํด์ : ๋์ผํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ๋ฒ ํด์ ํ๋ ค๊ณ ํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์์คํ ์ด ์์๋๊ณ ์ถฉ๋ ๋๋ ๋ณด์ ์ทจ์ฝ์ฑ์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ ํนํ ํฌ๊ณ ๋ณต์กํ ์ฝ๋๋ฒ ์ด์ค์์ ๋๋ฒ๊น ํ๊ธฐ๊ฐ ๋งค์ฐ ์ด๋ ต์ต๋๋ค. ์์ธก ๋ถ๊ฐ๋ฅํ ๋์๊ณผ ๋ณด์ ์ต์คํ๋ก์์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
๊ฐ๋น์ง ์ปฌ๋ ์ (Java, Go, Python)
Java, Go, Python๊ณผ ๊ฐ์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ธ์ด๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์๋ํํ์ฌ ๊ฐ๋ฐ์๊ฐ ์๋ ํ ๋น ๋ฐ ํด์ ์ ๋ถ๋ด์ ๋์ด์ค๋๋ค. ์ด๋ ๊ฐ๋ฐ์ ๋จ์ํํ๊ณ ๋ง์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ ์ค๋ฅ๋ฅผ ์ ๊ฑฐํ์ง๋ง, GC๋ ์์ฒด์ ์ธ ๋ฌธ์ ์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- ์ฑ๋ฅ ์ค๋ฒํค๋: ๊ฐ๋น์ง ์์ง๊ธฐ๋ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ค์บํ์ฌ ์ฌ์ฉ๋์ง ์์ ๊ฐ์ฒด๋ฅผ ์๋ณํ๊ณ ํ์ํฉ๋๋ค. ์ด ํ๋ก์ธ์ค๋ CPU ์ฌ์ดํด์ ์๋ชจํ๋ฉฐ, ํนํ ์ฑ๋ฅ์ด ์ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฑ๋ฅ ์ค๋ฒํค๋๋ฅผ ๋ฐ์์ํฌ ์ ์์ต๋๋ค.
- ์์ธก ๋ถ๊ฐ๋ฅํ ์ผ์ ์ค์ง: ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์คํ ์ค์ ์์ธก ๋ถ๊ฐ๋ฅํ ์ผ์ ์ค์ง๋ฅผ ์ ๋ฐํ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ "stop-the-world" ์ผ์ ์ค์ง๋ผ๊ณ ํฉ๋๋ค. ์ด๋ฌํ ์ผ์ ์ค์ง๋ ์ค์๊ฐ ์์คํ ๋๋ ์ผ๊ด๋ ์ฑ๋ฅ์ด ํ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์ฉ๋ฉ๋ ์ ์์ต๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์ฆ๊ฐ: ๊ฐ๋น์ง ์์ง๊ธฐ๋ ํจ์จ์ ์ผ๋ก ์๋ํ๊ธฐ ์ํด ์๋์ผ๋ก ๊ด๋ฆฌ๋๋ ์์คํ ๋ณด๋ค ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
GC๋ ๋ง์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ฉํ ๋๊ตฌ์ด์ง๋ง, ์์คํ ํ๋ก๊ทธ๋๋ฐ ๋๋ ์ฑ๋ฅ๊ณผ ์์ธก ๊ฐ๋ฅ์ฑ์ด ์ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์๋ ํญ์ ์ด์์ ์ธ ์๋ฃจ์ ์ ์๋๋๋ค.
Rust์ ์๋ฃจ์ : ์์ ๊ถ ๋ฐ ์ฐจ์ฉ
Rust๋ ๊ณ ์ ํ ์๋ฃจ์ ์ ์ ๊ณตํฉ๋๋ค. ์ฆ, ๊ฐ๋น์ง ์ปฌ๋ ์ ์์ด ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ์ ํ๋ณดํฉ๋๋ค. ์ด๋ ์์ ๊ถ ๋ฐ ์ฐจ์ฉ ์์คํ ์ ํตํด ๋ฌ์ฑ๋๋ฉฐ, ์ด๋ ๋ฐํ์ ์ค๋ฒํค๋ ์์ด ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ์ ์ ์ฉํ๋ ์ปดํ์ผ ํ์ ๊ท์น ์งํฉ์ ๋๋ค. ๋งค์ฐ ์๊ฒฉํ์ง๋ง ๋งค์ฐ ์ ์ฉํ ์ปดํ์ผ๋ฌ๋ก, ์ผ๋ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ค์๋ฅผ ํ์ง ์๋๋ก ๋ณด์ฅํฉ๋๋ค.
์์ ๊ถ
Rust์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ํต์ฌ ๊ฐ๋ ์ ์์ ๊ถ์ ๋๋ค. Rust์ ๋ชจ๋ ๊ฐ์๋ ํด๋น ๊ฐ์ ์์ ํ๋ ๋ณ์๊ฐ ์์ต๋๋ค. ํ ๋ฒ์ ํ๋์ ๊ฐ์ ๋ํด์๋ง ์์ ์๊ฐ ์์ ์ ์์ต๋๋ค. ์์ ์๊ฐ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด ๊ฐ์ด ์๋์ผ๋ก ์ญ์ (ํด์ )๋ฉ๋๋ค. ์ด๋ ์๋ ๋ฉ๋ชจ๋ฆฌ ํด์ ์ ํ์์ฑ์ ์์ ๊ณ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
๋ค์์ ๊ฐ๋จํ ์๋ฅผ ๊ณ ๋ คํด ๋ณด์ธ์.
fn main() {
let s = String::from("hello"); // s๋ ๋ฌธ์์ด ๋ฐ์ดํฐ๋ฅผ ์์ ํฉ๋๋ค.
// ... s๋ก ๋ฌด์์ธ๊ฐ ์ํ ...
} // s๊ฐ ์ฌ๊ธฐ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด ๋ฌธ์์ด ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋ฉ๋๋ค.
์ด ์์์ ๋ณ์ `s`๋ ๋ฌธ์์ด ๋ฐ์ดํฐ "hello"๋ฅผ ์์ ํฉ๋๋ค. `s`๊ฐ `main` ํจ์ ๋์์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด ๋ฌธ์์ด ๋ฐ์ดํฐ๊ฐ ์๋์ผ๋ก ์ญ์ ๋์ด ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
์์ ๊ถ์ ๋ํ ๊ฐ์ด ํ ๋น๋๊ณ ํจ์๋ก ์ ๋ฌ๋๋ ๋ฐฉ์์๋ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ๊ฐ์ด ์ ๋ณ์์ ํ ๋น๋๊ฑฐ๋ ํจ์๋ก ์ ๋ฌ๋ ๋ ์์ ๊ถ์ด ์ด๋๋๊ฑฐ๋ ๋ณต์ฌ๋ฉ๋๋ค.
์ด๋
์์ ๊ถ์ด ์ด๋๋๋ฉด ์๋ ๋ณ์๋ ๋ฌดํจํ๋์ด ๋ ์ด์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ฌ๋ฌ ๋ณ์๊ฐ ๋์ผํ ๋ฉ๋ชจ๋ฆฌ ์์น๋ฅผ ๊ฐ๋ฆฌํค๋ ๊ฒ์ ๋ฐฉ์งํ๊ณ ๋ฐ์ดํฐ ๊ฒฝํฉ ๋ฐ ๋๊ธ๋ง ํฌ์ธํฐ์ ์ํ์ ์ ๊ฑฐํฉ๋๋ค.
fn main() {
let s1 = String::from("hello");
let s2 = s1; // ๋ฌธ์์ด ๋ฐ์ดํฐ์ ์์ ๊ถ์ด s1์์ s2๋ก ์ด๋
// println!("{}", s1); // s1์ด ๋ ์ด์ ์ ํจํ์ง ์์ผ๋ฏ๋ก ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
println!("{}", s2); // s2๊ฐ ํ์ฌ ์์ ์์ด๋ฏ๋ก ๊ด์ฐฎ์ต๋๋ค.
}
์ด ์์์ ๋ฌธ์์ด ๋ฐ์ดํฐ์ ์์ ๊ถ์ด `s1`์์ `s2`๋ก ์ด๋ํฉ๋๋ค. ์ด๋ ํ `s1`์ ๋ ์ด์ ์ ํจํ์ง ์์ผ๋ฉฐ ์ฌ์ฉํ๋ ค๊ณ ํ๋ฉด ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ณต์ฌ
`Copy` ํธ๋ ์ดํธ(์: ์ ์, ๋ถ์ธ, ๋ฌธ์)๋ฅผ ๊ตฌํํ๋ ํ์ ์ ๊ฒฝ์ฐ, ๊ฐ์ด ํ ๋น๋๊ฑฐ๋ ํจ์๋ก ์ ๋ฌ๋ ๋ ๊ฐ์ด ์ด๋๋๋ ๋์ ๋ณต์ฌ๋ฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๊ฐ์ ์๋กญ๊ณ ๋ ๋ฆฝ์ ์ธ ๋ณต์ฌ๋ณธ์ด ์์ฑ๋๊ณ ์๋ ๊ฐ๊ณผ ๋ณต์ฌ๋ณธ ๋ชจ๋ ์ ํจํ๊ฒ ์ ์ง๋ฉ๋๋ค.
fn main() {
let x = 5;
let y = x; // x๊ฐ y๋ก ๋ณต์ฌ๋ฉ๋๋ค.
println!("x = {}, y = {}", x, y); // x์ y ๋ชจ๋ ์ ํจํฉ๋๋ค.
}
์ด ์์์ `x`์ ๊ฐ์ด `y`๋ก ๋ณต์ฌ๋ฉ๋๋ค. `x`์ `y` ๋ชจ๋ ์ ํจํ๊ณ ๋ ๋ฆฝ์ ์ผ๋ก ์ ์ง๋ฉ๋๋ค.
์ฐจ์ฉ
์์ ๊ถ์ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ์ ํ์์ ์ด์ง๋ง, ์ด๋ค ๊ฒฝ์ฐ์๋ ์ ํ์ ์ผ ์ ์์ต๋๋ค. ๋๋ก๋ ์์ ๊ถ์ ์ด์ ํ์ง ์๊ณ ์ฝ๋์ ์ฌ๋ฌ ๋ถ๋ถ์์ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋๋ก ํ์ฉํด์ผ ํฉ๋๋ค. ์ด๊ฒ์ด ์ฐจ์ฉ์ด ๋ฑ์ฅํ๋ ๊ณณ์ ๋๋ค.
์ฐจ์ฉ์ ํตํด ์์ ๊ถ์ ๊ฐ์ ธ๊ฐ์ง ์๊ณ ๋ฐ์ดํฐ์ ๋ํ ์ฐธ์กฐ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ ๋ ๊ฐ์ง ์ ํ์ ์ฐธ์กฐ๊ฐ ์์ต๋๋ค.
- ๋ถ๋ณ ์ฐธ์กฐ: ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ ์์ง๋ง ์์ ํ ์๋ ์์ต๋๋ค. ๋์ผํ ๋ฐ์ดํฐ์ ๋ํ ์ฌ๋ฌ ๋ถ๋ณ ์ฐธ์กฐ๋ฅผ ๋์์ ๊ฐ์ง ์ ์์ต๋๋ค.
- ๊ฐ๋ณ ์ฐธ์กฐ: ๋ฐ์ดํฐ๋ฅผ ์์ ํ ์ ์์ต๋๋ค. ํ ๋ฒ์ ํ๋์ ๋ฐ์ดํฐ์ ๋ํด์๋ง ํ๋์ ๊ฐ๋ณ ์ฐธ์กฐ๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
์ด๋ฌํ ๊ท์น์ ๋ฐ์ดํฐ๊ฐ ์ฝ๋์ ์ฌ๋ฌ ๋ถ๋ถ์์ ๋์์ ์์ ๋์ง ์๋๋ก ํ์ฌ ๋ฐ์ดํฐ ๊ฒฝํฉ์ ๋ฐฉ์งํ๊ณ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํฉ๋๋ค. ์ด๋ฌํ ๊ท์น๋ ์ปดํ์ผ ํ์์ ์ ์ฉ๋ฉ๋๋ค.
fn main() {
let mut s = String::from("hello");
let r1 = &s; // ๋ถ๋ณ ์ฐธ์กฐ
let r2 = &s; // ๋ ๋ค๋ฅธ ๋ถ๋ณ ์ฐธ์กฐ
println!("{} and {}", r1, r2); // ๋ ์ฐธ์กฐ ๋ชจ๋ ์ ํจํฉ๋๋ค.
// let r3 = &mut s; // ์ด๋ฏธ ๋ถ๋ณ ์ฐธ์กฐ๊ฐ ์์ผ๋ฏ๋ก ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
let r3 = &mut s; // ๊ฐ๋ณ ์ฐธ์กฐ
r3.push_str(", world");
println!("{}", r3);
}
์ด ์์์ `r1`๊ณผ `r2`๋ ๋ฌธ์์ด `s`์ ๋ํ ๋ถ๋ณ ์ฐธ์กฐ์ ๋๋ค. ๋์ผํ ๋ฐ์ดํฐ์ ๋ํ ์ฌ๋ฌ ๋ถ๋ณ ์ฐธ์กฐ๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ธฐ์กด ๋ถ๋ณ ์ฐธ์กฐ๊ฐ ์๋ ๋์ ๊ฐ๋ณ ์ฐธ์กฐ(`r3`)๋ฅผ ๋ง๋ค๋ ค๊ณ ํ๋ฉด ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. Rust๋ ๋์ผํ ๋ฐ์ดํฐ์ ๋ํด ๊ฐ๋ณ ๋ฐ ๋ถ๋ณ ์ฐธ์กฐ๋ฅผ ๋์์ ๊ฐ์ง ์ ์๋ค๋ ๊ท์น์ ์ ์ฉํฉ๋๋ค. ๋ถ๋ณ ์ฐธ์กฐ ์ดํ์ ํ๋์ ๊ฐ๋ณ ์ฐธ์กฐ `r3`๊ฐ ์์ฑ๋ฉ๋๋ค.
๋ผ์ดํํ์
๋ผ์ดํํ์์ Rust์ ์ฐจ์ฉ ์์คํ ์ ์ค์ํ ๋ถ๋ถ์ ๋๋ค. ์ฐธ์กฐ๊ฐ ์ ํจํ ๋ฒ์๋ฅผ ์ค๋ช ํ๋ ์ฃผ์์ ๋๋ค. ์ปดํ์ผ๋ฌ๋ ๋ผ์ดํํ์์ ์ฌ์ฉํ์ฌ ์ฐธ์กฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฐ์ดํฐ๋ณด๋ค ์ค๋ ์ง์๋์ง ์๋๋ก ํ์ฌ ๋๊ธ๋ง ํฌ์ธํฐ๋ฅผ ๋ฐฉ์งํฉ๋๋ค. ๋ผ์ดํํ์์ ๋ฐํ์ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น์ง ์์ผ๋ฉฐ, ์ปดํ์ผ ํ์ ๊ฒ์ฌ๋ง์ ์ํ ๊ฒ์ ๋๋ค.
๋ค์์ ์๋ฅผ ๊ณ ๋ คํด ๋ณด์ธ์.
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
if x.len() > y.len() {
x
} else {
y
}
}
fn main() {
let string1 = String::from("long string is long");
{
let string2 = String::from("xyz");
let result = longest(string1.as_str(), string2.as_str());
println!("The longest string is {}", result);
}
}
์ด ์์์ `longest` ํจ์๋ ๋ ๊ฐ์ ๋ฌธ์์ด ์ฌ๋ผ์ด์ค(`&str`)๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ๋ ๊ฐ ์ค ๊ฐ์ฅ ๊ธด ๋ฌธ์์ด ์ฌ๋ผ์ด์ค๋ฅผ ๋ํ๋ด๋ ๋ฌธ์์ด ์ฌ๋ผ์ด์ค๋ฅผ ๋ฐํํฉ๋๋ค. `<'a>` ๊ตฌ๋ฌธ์ ๋ผ์ดํํ์ ๋งค๊ฐ๋ณ์ `'a`๋ฅผ ๋์ ํ์ฌ ์ ๋ ฅ ๋ฌธ์์ด ์ฌ๋ผ์ด์ค์ ๋ฐํ๋ ๋ฌธ์์ด ์ฌ๋ผ์ด์ค๊ฐ ๋์ผํ ๋ผ์ดํํ์์ ๊ฐ์ ธ์ผ ํจ์ ๋ํ๋ ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ฐํ๋ ๋ฌธ์์ด ์ฌ๋ผ์ด์ค๊ฐ ์ ๋ ฅ ๋ฌธ์์ด ์ฌ๋ผ์ด์ค๋ณด๋ค ์ค๋ ์ง์๋์ง ์๋๋ก ๋ณด์ฅํฉ๋๋ค. ๋ผ์ดํํ์ ์ฃผ์์ด ์์ผ๋ฉด ์ปดํ์ผ๋ฌ๊ฐ ๋ฐํ๋ ์ฐธ์กฐ์ ์ ํจ์ฑ์ ๋ณด์ฅํ ์ ์์ต๋๋ค.
์ปดํ์ผ๋ฌ๋ ๋ง์ ๊ฒฝ์ฐ์ ๋ผ์ดํํ์์ ์ถ๋ก ํ ๋งํผ ๋๋ํฉ๋๋ค. ๋ช ์์ ์ธ ๋ผ์ดํํ์ ์ฃผ์์ ์ปดํ์ผ๋ฌ๊ฐ ์์ฒด์ ์ผ๋ก ๋ผ์ดํํ์์ ๊ฒฐ์ ํ ์ ์๋ ๊ฒฝ์ฐ์๋ง ํ์ํฉ๋๋ค.
Rust์ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ ์ ๊ทผ ๋ฐฉ์์ ์ฅ์
Rust์ ์์ ๊ถ ๋ฐ ์ฐจ์ฉ ์์คํ ์ ๋ค์๊ณผ ๊ฐ์ ๋ช ๊ฐ์ง ์ค์ํ ์ด์ ์ ์ ๊ณตํฉ๋๋ค.
- ๊ฐ๋น์ง ์ปฌ๋ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ: Rust๋ ์ปดํ์ผ ํ์์ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ์ ๋ณด์ฅํ์ฌ ๋ฐํ์ ๊ฐ๋น์ง ์ปฌ๋ ์ ๊ณผ ๊ด๋ จ ์ค๋ฒํค๋๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
- ๋ฐ์ดํฐ ๊ฒฝํฉ ์์: Rust์ ์ฐจ์ฉ ๊ท์น์ ๋ฐ์ดํฐ ๊ฒฝํฉ์ ๋ฐฉ์งํ์ฌ ๊ฐ๋ณ ๋ฐ์ดํฐ์ ๋ํ ๋์ ์ก์ธ์ค๊ฐ ํญ์ ์์ ํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
- ์ ๋ก ์ฝ์คํธ ์ถ์ํ: Rust์ ์ถ์ํ(์: ์์ ๊ถ ๋ฐ ์ฐจ์ฉ)์๋ ๋ฐํ์ ๋น์ฉ์ด ์์ต๋๋ค. ์ปดํ์ผ๋ฌ๋ ์ฝ๋๋ฅผ ์ต๋ํ ํจ์จ์ ์ผ๋ก ์ต์ ํํฉ๋๋ค.
- ์ฑ๋ฅ ํฅ์: ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋ฐฉ์งํ๊ณ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํจ์ผ๋ก์จ Rust๋ C ๋ฐ C++์ ์ข ์ข ๋น๊ตํ ์ ์๋ ๋ฐ์ด๋ ์ฑ๋ฅ์ ๋ฌ์ฑํ ์ ์์ต๋๋ค.
- ๊ฐ๋ฐ์ ์ ๋ขฐ๋ ํฅ์: Rust์ ์ปดํ์ผ ํ์ ๊ฒ์ฌ๋ ๋ง์ ์ผ๋ฐ์ ์ธ ํ๋ก๊ทธ๋๋ฐ ์ค๋ฅ๋ฅผ ์ก์๋ด์ด ๊ฐ๋ฐ์๊ฐ ์ฝ๋์ ์ ํ์ฑ์ ๋ํด ๋ ๋ง์ ํ์ ์ ๊ฐ๋๋ก ํฉ๋๋ค.
์ค์ฉ์ ์ธ ์์ ๋ฐ ์ฌ์ฉ ์ฌ๋ก
Rust์ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ๊ณผ ์ฑ๋ฅ์ ๊ด๋ฒ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํฉ๋๋ค.
- ์์คํ ํ๋ก๊ทธ๋๋ฐ: ์ด์ ์ฒด์ , ์๋ฒ ๋๋ ์์คํ ๋ฐ ์ฅ์น ๋๋ผ์ด๋ฒ๋ Rust์ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ๊ณผ ์ ์์ค ์ ์ด์ ์ด์ ์ ๋๋ฆฝ๋๋ค.
- WebAssembly (Wasm): Rust๋ WebAssembly๋ก ์ปดํ์ผ๋ ์ ์์ด ๊ณ ์ฑ๋ฅ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- ๋ช ๋ น์ค ๋๊ตฌ: Rust๋ ๋น ๋ฅด๊ณ ์์ ์ ์ธ ๋ช ๋ น์ค ๋๊ตฌ๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ํ์ํ ์ ํ์ ๋๋ค.
- ๋คํธ์ํน: Rust์ ๋์์ฑ ๊ธฐ๋ฅ๊ณผ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ์ ๊ณ ์ฑ๋ฅ ๋คํธ์ํน ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ์ ์ ํฉํฉ๋๋ค.
- ๊ฒ์ ๊ฐ๋ฐ: ๊ฒ์ ์์ง ๋ฐ ๊ฒ์ ๊ฐ๋ฐ ๋๊ตฌ๋ Rust์ ์ฑ๋ฅ๊ณผ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ์ ํ์ฉํ ์ ์์ต๋๋ค.
๋ค์์ ๋ช ๊ฐ์ง ๊ตฌ์ฒด์ ์ธ ์์ ๋๋ค.
- Servo: Mozilla์์ ๊ฐ๋ฐํ ๋ณ๋ ฌ ๋ธ๋ผ์ฐ์ ์์ง์ผ๋ก, Rust๋ก ์์ฑ๋์์ต๋๋ค. Servo๋ ๋ณต์กํ๊ณ ๋์์ ์ธ ์์คํ ์ ์ฒ๋ฆฌํ๋ Rust์ ๋ฅ๋ ฅ์ ๋ณด์ฌ์ค๋๋ค.
- TiKV: PingCAP์์ ๊ฐ๋ฐํ ๋ถ์ฐ ํค-๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก, Rust๋ก ์์ฑ๋์์ต๋๋ค. TiKV๋ ๊ณ ์ฑ๋ฅ์ ์์ ์ ์ธ ๋ฐ์ดํฐ ์ ์ฅ ์์คํ ์ ๊ตฌ์ถํ๋ ๋ฐ Rust๊ฐ ์ ํฉํ๋ค๋ ๊ฒ์ ๋ณด์ฌ์ค๋๋ค.
- Deno: JavaScript ๋ฐ TypeScript๋ฅผ ์ํ ์์ ํ ๋ฐํ์์ผ๋ก, Rust๋ก ์์ฑ๋์์ต๋๋ค. Deno๋ ์์ ํ๊ณ ํจ์จ์ ์ธ ๋ฐํ์ ํ๊ฒฝ์ ๊ตฌ์ถํ๋ Rust์ ๋ฅ๋ ฅ์ ๋ณด์ฌ์ค๋๋ค.
Rust ํ์ต: ์ ์ง์ ์ธ ์ ๊ทผ ๋ฐฉ์
Rust์ ์์ ๊ถ ๋ฐ ์ฐจ์ฉ ์์คํ ์ ์ฒ์์ ๋ฐฐ์ฐ๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฐ์ต๊ณผ ์ธ๋ด์ฌ์ ํตํด ์ด๋ฌํ ๊ฐ๋ ์ ๋ง์คํฐํ๊ณ Rust์ ๊ฐ๋ ฅํจ์ ํ์ฉํ ์ ์์ต๋๋ค. ๋ค์์ ๊ถ์ฅ๋๋ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค.
- ๊ธฐ๋ณธ ์ฌํญ๋ถํฐ ์์: Rust์ ๊ธฐ๋ณธ ๊ตฌ๋ฌธ๊ณผ ๋ฐ์ดํฐ ์ ํ์ ๋ฐฐ์ฐ๋ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค.
- ์์ ๊ถ ๋ฐ ์ฐจ์ฉ์ ์ง์ค: ์์ ๊ถ ๋ฐ ์ฐจ์ฉ ๊ท์น์ ์ดํดํ๋ ๋ฐ ์๊ฐ์ ํ ์ ํฉ๋๋ค. ๋ค์ํ ์๋๋ฆฌ์ค๋ฅผ ์คํํ๊ณ ๊ท์น์ ์๋ฐํ์ฌ ์ปดํ์ผ๋ฌ๊ฐ ์ด๋ป๊ฒ ๋ฐ์ํ๋์ง ํ์ธํฉ๋๋ค.
- ์์ ์ฐ์ต: ์์ต์์ ์์ ๋ฅผ ํตํด Rust์ ๋ํ ์ค์ง์ ์ธ ๊ฒฝํ์ ์ป์ผ์ธ์.
- ์์ ํ๋ก์ ํธ ๊ตฌ์ถ: ์์ ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ถํ์ฌ ์ง์์ ์ ์ฉํ๊ณ ์ดํด๋ฅผ ๊ตณํ์ธ์.
- ๋ฌธ์ ์ฝ๊ธฐ: ๊ณต์ Rust ๋ฌธ์๋ ์ธ์ด ๋ฐ ํด๋น ๊ธฐ๋ฅ์ ๋ํด ๋ฐฐ์ฐ๋ ๋ฐ ํ๋ฅญํ ๋ฆฌ์์ค์ ๋๋ค.
- ์ปค๋ฎค๋ํฐ ๊ฐ์ : Rust ์ปค๋ฎค๋ํฐ๋ ์น์ ํ๊ณ ์ง์์ ์ ๋๋ค. ์จ๋ผ์ธ ํฌ๋ผ ๋ฐ ์ฑํ ๊ทธ๋ฃน์ ์ฐธ์ฌํ์ฌ ์ง๋ฌธํ๊ณ ๋ค๋ฅธ ์ฌ๋์๊ฒ ๋ฐฐ์ฐ์ธ์.
Rust๋ฅผ ๋ฐฐ์ฐ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ํ๋ฅญํ ๋ฆฌ์์ค๊ฐ ๋ง์ด ์์ต๋๋ค. ๋ค์์ ๊ทธ ์์ ๋๋ค.
- The Rust Programming Language (The Book): Rust์ ๋ํ ๊ณต์ ์ฑ ์ผ๋ก, ์จ๋ผ์ธ์์ ๋ฌด๋ฃ๋ก ์ ๊ณต๋ฉ๋๋ค: https://doc.rust-lang.org/book/
- Rust by Example: ๋ค์ํ Rust ๊ธฐ๋ฅ์ ๋ณด์ฌ์ฃผ๋ ์ฝ๋ ์์ ๋ชจ์: https://doc.rust-lang.org/rust-by-example/
- Rustlings: Rust๋ฅผ ๋ฐฐ์ฐ๋ ๋ฐ ๋์์ด ๋๋ ์์ ์ฐ์ต ๋ชจ์: https://github.com/rust-lang/rustlings
๊ฒฐ๋ก
๊ฐ๋น์ง ์ปฌ๋ ์ ์๋ Rust์ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ์ ์์คํ ํ๋ก๊ทธ๋๋ฐ์์ ์ค์ํ ์ฑ๊ณผ์ ๋๋ค. ํ์ ์ ์ธ ์์ ๊ถ ๋ฐ ์ฐจ์ฉ ์์คํ ์ ํ์ฉํ์ฌ Rust๋ ๊ฐ๋ ฅํ๊ณ ํจ์จ์ ์ธ ๋ฐฉ์์ผ๋ก ๊ฐ๋ ฅํ๊ณ ์์ ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์๋๋ก ํฉ๋๋ค. ํ์ต ๊ณก์ ์ด ๊ฐํ๋ฅผ ์ ์์ง๋ง, Rust์ ์ ๊ทผ ๋ฐฉ์์ ์ด์ ์ ํฌ์ํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ, ์ฑ๋ฅ ๋ฐ ๋์์ฑ์ ๊ฒฐํฉํ ์ธ์ด๋ฅผ ์ฐพ๊ณ ์๋ค๋ฉด Rust๊ฐ ํ์ํ ์ ํ์ ๋๋ค.
์ํํธ์จ์ด ๊ฐ๋ฐ ํ๊ฒฝ์ด ๊ณ์ ์งํํจ์ ๋ฐ๋ผ Rust๋ ์์ ๊ณผ ์ฑ๋ฅ์ ๋ชจ๋ ์ฐ์ ์ํ๋ ์ธ์ด๋ก ๋๊ฐ์ ๋ํ๋ด๋ฉฐ, ๊ฐ๋ฐ์๊ฐ ์ฐจ์ธ๋ ํต์ฌ ์ธํ๋ผ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์๋๋ก ์ง์ํฉ๋๋ค. ๋ ธ๋ จํ ์์คํ ํ๋ก๊ทธ๋๋จธ์ด๋ ์ด ๋ถ์ผ์ ์ ์ ์ด๋ , Rust์ ๊ณ ์ ํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฐฉ์์ ํ๊ตฌํ๋ ๊ฒ์ ์ํํธ์จ์ด ์ค๊ณ์ ๋ํ ์ดํด๋ฅผ ๋ํ๊ณ ์๋ก์ด ๊ฐ๋ฅ์ฑ์ ์ด์ด์ค ๊ฐ์น ์๋ ๋ ธ๋ ฅ์ ๋๋ค.