โ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๊ฐ์ด๋ ๋ชฉ๋ก์ผ๋ก ๋์๊ฐ๊ธฐ
๐ฆ Rust ์์ธ ๊ฐ์ด๋ โ
"๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ๊ณผ ๊ทนํ์ ์ฑ๋ฅ์ ๋์์ ์ ๋ณตํ ์ฐจ์ธ๋ ๊ฐ์ฒ ์์ง"
๐ก 1. 30๋ ์ฐจ ์ ๋ฐฐ์ ์ฌ์ด ์ค๋ช โ
๊ณผ๊ฑฐ์ ๊ฐ์ฅ ๋น ๋ฅด๊ณ ์ฐ์ฐ์ด ๊ฐ๋ ฅํ ์ํํธ์จ์ด๋ฅผ ๋ง๋ค ๋๋ C์ธ์ด๋ C++์ ์ผ์ต๋๋ค. ํ์ง๋ง C/C++์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ๋ฐ์๊ฐ ์ง์ ํ ๋นํ๊ณ ์ง์์ฃผ์ด์ผ ํ๊ธฐ ๋๋ฌธ์, ํด์ปค๋ค์ ๋์ดํฐ๊ฐ ๋๋ ๋ณด์ ๊ตฌ๋ฉ(๋ฉ๋ชจ๋ฆฌ ์ค์ผ, ํด์ ๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฌ์ฉ ๋ฑ)์ด ์์์ด ๋ซ๋ฆฌ๊ณค ํ์ต๋๋ค.
Rust(๋ฌ์คํธ) ๋ ๋ฐ๋ก ์ด ์ง์ ์์ C++ ์์ค์ ์๋์ ์ธ ์๋๋ฅผ ๊ทธ๋๋ก ์ ์งํ๋ฉด์, "์ปดํ์ผ๋ฌ ๋ ๋ฒจ์์ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ์ 100% ๊ฒ์ฆ" ํด๋ด๋ ๋๋ผ์ด ์์คํ ์ธ์ด๋ก ๋ํ๋ฌ์ต๋๋ค. ๋ฌ์คํธ ์ปดํ์ผ๋ฌ๋ ๋งค์ฐ ํน๋ ํ๊ธฐ๋ก ์ ๋ช ํฉ๋๋ค. "์์ ๊ถ(Ownership)" ๊ณผ "๋์ฌ(Borrowing)" ๋ผ๋ ๋ ์ฐฝ์ ์ธ ๊ท์น์ ๊ฐ์ ํ์ฌ, ๋ฉ๋ชจ๋ฆฌ ์์ ์ ์ํด๋ฅผ ๊ฐํ๋ ์์ฌ์ค๋ฌ์ด ์ฝ๋๋ ๋น๋(์ปดํ์ผ)์กฐ์ฐจ ์์ผ์ฃผ์ง ์์ต๋๋ค.
- ๋น์ ํ์๋ฉด: ๋ฏธ์ธํ ํ ์ง์ด๋ ์กฐ๋ฆฝ ์ค์๊ฐ ์กฐ๊ธ์ด๋ผ๋ ๋ฐ๊ฒฌ๋๋ฉด ์์ ์กฐ๋ฆฝ ๊ธฐ๊ณ ๊ฐ๋์ ๋ฉ์ถ๊ณ ๊ฒฝ๋ณด์์ ์ง๋ฅด๋ ์ต์ฒจ๋จ ์ ๋ฐ ์๋ํ ๊ณต์ฅ ์์คํ ๊ณผ ๊ฐ์ต๋๋ค.
๐ ๏ธ 2. ์ด๋์ ์ฃผ๋ก ์ฐ์ด๋์? โ
- ๊ณ ์ฑ๋ฅ ์์ง ๋ฐ ๋ธ๋ผ์ฐ์ ์ฝ์ด: ์น ๋ธ๋ผ์ฐ์ ์์ง, ์ด์์ฒด์ (Linux ์ปค๋ ์ฝ์ด ๋ฑ) ๋ฐ ๊ณ ์ฑ๋ฅ ๋ฏธ๋์ด ํ๋ก์ธ์ ์๋ฒ ๋ชจ๋.
- ๋ธ๋ก์ฒด์ธ & ์ค๋งํธ ์ฝํธ๋ํธ: ํธ๋์ญ์ ์ ์ ํ์ฑ๊ณผ ์ฒ ํต๊ฐ์ ์์ ์ฑ์ด ํ์์ ์ธ ํ๋ ๋ธ๋ก์ฒด์ธ ๋ ธ๋ ๊ฐ๋ฐ์ ์ ๋๊ฐ์์ ๋๋ค.
- WebAssembly (Wasm): ์น ๋ธ๋ผ์ฐ์ ์์์ ํฌํ ์ต, 3D ์บ๋ ๋ฑ ๋ฐ์คํฌํฑ ์ฑ ๋ฒ๊ธ๊ฐ๋ ์ฑ๋ฅ์ ๋ ๋๋งํ ๋ ์ฐ์ ๋๋ค.
โ๏ธ 3. ์ฅ์ ๊ณผ ๋จ์ (์ ๋ฐฐ์ ์์ง ํ๋ง๋) โ
- ์ฅ์ (ํํ ์๋ ๊ฒฌ๊ณ ํจ):
- Garbage Collector๊ฐ ์์: ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ฃผ๊ธฐ์ ์ผ๋ก ์ฐ๋ ๊ธฐ ๋ฐ์ดํฐ๋ฅผ ์น์ ์๋๋ฅผ ๋จ์ด๋จ๋ฆฌ๋ ์ฒญ์๋ถ(๊ฐ๋น์ง ์ปฌ๋ ํฐ)๊ฐ ์๋๋ฐ๋ ๋ถ๊ตฌํ๊ณ ์ฝ๋๊ฐ ์์ ํ๊ณ ๋น ๋ฆ ๋๋ค.
- ๋์์ฑ ๋ฒ๊ทธ ์ ๋ก: ๋ฉํฐ ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ ์ ์ค๋ ๋ ๊ฐ ๋ฐ์ดํฐ๊ฐ ์ํค๋ ๊ฒฝ์ ์ํ(Race Condition)๋ฅผ ์ฐจ๋จํฉ๋๋ค.
- ๋จ์ (์ด๋ฒํ ์ปดํ์ผ๋ฌ):
- ๊ณต๋ถ ๋์ด๋ ๊ทน์: "์ปดํ์ผ๋ฌ์ ์ธ์์ ์ด๊ฒจ์ผ ํ๋ค"๋ ๋ง์ด ์์ ์ ๋๋ก ์ด๋ณด์๊ฐ ๋ ํํ ๋ ์์ ๊ถ ์๋ฌ ๋๋ฌธ์ ์ข์ ์ ๊ฐ์ฅ ๋ง์ด ๊ฒช์ต๋๋ค.
๐ 4. ์ด๋ณด์๋ฅผ ์ํ ์ฒซ๊ฑธ์ ์ฝ๋ โ
๋ฌ์คํธ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ ํ๊ณ ๋น๋ ค์ฃผ๋ ๋ ํนํ ์์ ์ ๋๋ค.
fn main() {
// 1. s1 ๋ณ์๊ฐ ํฌ๋ก ๋ฌธ์์ด์ ์์ ๊ถ์ ๊ฐ์ง๋๋ค.
let s1 = String::from("Hello, Rust!");
// 2. ์์ ๊ถ์ ๋น๋ ค์ฃผ๊ธฐ(์ฐธ์กฐ) ์ํด & ๊ธฐํธ๋ฅผ ๋ถ์
๋๋ค.
print_message(&s1);
// 3. ์์ ๊ถ์ ์์ ํ ์๋(Move)ํ๋ฉด ๋ ์ด์ ์ด์ ๋ณ์๋ ์ธ ์ ์์ต๋๋ค.
let s2 = s1;
// println!("{}", s1); // โ ์๋ฌ ๋ฐ์! s1์ ๋ฉ๋ชจ๋ฆฌ๋ ์ด๋ฏธ s2๋ก ์ด์ฌํ๊ธฐ ๋๋ฌธ์
๋๋ค.
println!("์์ ๊ถ ์ด์ฌ ์๋ฃ: {}", s2);
}
fn print_message(msg: &String) {
println!("์์ ๋์ฌํด ์ฝ์: {}", msg);
}๐ฏ 5. ์ด๋ณด์ ์ถ์ฒ ๊ณต๋ถ ๋ฐฉํฅ โ
- ๋ฌ์คํธ๋ ์ ๋๋ก ์ฒซ ๋ฒ์งธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์ ํํ์ง ๋ง์ธ์. ์๋ฐ์คํฌ๋ฆฝํธ๋ ํ์ด์ฌ์ผ๋ก ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ณธ ๊ฐ๋ ์ ์ก์ ๋ค ๋์ ํ๋ ๊ฒ์ ๊ฐ๋ ฅํ ๊ถ์ฅํฉ๋๋ค.
- ๊ณต์ ํ์ต์์ธ The Rust Programming Language ๋ฒ์ญํ์ ์ฒ์ฒํ ์ฝ์ด๋ณด๋ฉฐ '์์ ๊ถ๊ณผ ๋์ฌ' ๊ฐ๋ ์ ์ดํดํด์ผ ํฉ๋๋ค.
- ์ง์ ๋ณ์๋ฅผ ๋ฃ๊ณ ๋บ ๋ ์ผ์ด๋๋ ์๋ฌ ๋ฉ์์ง๋ฅผ ์ ๋ ํ๋ ์ต๊ด์ ๋ค์ด์ธ์. ๋ฌ์คํธ๋ ์๋ฌ ๋ฉ์์ง๊ฐ ์ธ์์์ ๊ฐ์ฅ ์น์ ํ๊ฒ ๊ต์ ๊ฐ์ด๋๋ฅผ ์ค๋๋ค.