728x90
✅ 1. 소유권(Ownership)
변수는 어떤 값의 소유자가 되며 소유자는 하나뿐입니다. 소유자가 범위를 벗어나면(scope 종료) 값이 자동으로 메모리에서 해제됩니다.(drop 호출)
{
let s = String::from("Hello, World"); // s는 "Hello, World"의 소유자
} // 여기서 s가 범위를 벗어나며 메모리 해제
✅ 2. 이동(Move)와 복사(Copy)
- Move: 소유권이 다른 변수로 넘어감 -> 원래 변수는 더 이상 사용 불가
- Copy: 스택에 저장되는 단순 값(i32, bool 등)은 복사 가능
fn main() {
let s1 = String::from("Hello");
let s2 = s1;
// println!("{}", s1); // 🚫 에러: s1은 더 이상 유효하지 X
let x = 5;
let y = x; // x의 값이 복사
println!("{}", x); // ✅ 에러 X
}
✅ 3.대여(Borrowing)와 참조(Refrence)
- &T: 불변 참조 -> 읽기만 가능, 여러 개 동시에 허용
- &mut T : 가변 참조 -> 쓰기 가능, 단 한번에 하나만 허용
fn main() {
let mut s = String::from("Hello");
let r1 = &s; // 불변 참조
let r2 = &s; // 또 다른 불변 참조
println!("r1: {}, r2: {}", r1, r2); // ✅ 에러 X
// println!("r3: {}", r3); // 🚫 에러: r3는 아직 유효하지 X
let r3 = &mut s; // 가변 참조 (이 시점부터 불변 참조 X)
r3.push_str(", World!"); // s를 변경
println!("r3: {}", r3); // ✅ 에러 X)
}
✅ 4. 수명(Lifetime)
수명은 참조가 유효한 범위를 컴파일 타입에 검사하며 Dangling pointer를 방지합니다.
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
if x.len() > y.len() {
x
} else {
y
}
}
✅ 5. RAII (Resource Acquisition Is Initialization)
- 스코프 종료 시 자동으로 메모리 해제
- C++의 RAII 개념과 동일
- drop 함수 자동 호출
GitHub - Koras02/rust-tutorial: https://thinky.tistory.com/category/Back-End/Rust
https://thinky.tistory.com/category/Back-End/Rust. Contribute to Koras02/rust-tutorial development by creating an account on GitHub.
github.com
728x90
LIST
'Back-End > Rust' 카테고리의 다른 글
[Rust] 15장(완) - Rust 코드 작성 - 프로젝트 생성, 코드 예제 (3) | 2025.08.13 |
---|---|
[Rust] 14장 매크로 (4) | 2025.08.13 |
[Rust] 12장 비동기 프로그래밍 (1) | 2025.08.05 |
[Rust] 11장 고차 함수 (0) | 2025.04.04 |
[Rust] 10장 트레이트 (0) | 2025.03.25 |