🦀 Rust의 소유권(Ownership)과 메모리 모델
Rust는 소유권(ownership) 시스템을 통해 메모리를 안전하게 관리하며, GC 없이도 안정성을 보장합니다.
🦀 예시: 스택에서 값 전달
fn main() {
let x = 1;
let y = 3;
println!("{}", sum(x, y));
println!("Hello world!");
}
fn sum(a: i32, b: i32) -> i32 {
et c = a + b;
return c;
}
🦀 예시: 스코프 벗어난 변수 접근
fn main() {
let x = 3; // 스택에 변수 생성
{
let y = 3; // 내부 스코프의 스택 변수
}
println!("{}", y); // ❌ 에러: y는 스코프 밖
}
🦀 함수에 힙 변수 전달 시 소유권 이전(Move)
fn main() {
let s1 = String::from("Hello");
let s2 = s1;
println!("{}", s1); // ❌ 에러: s1은 더 이상 유효하지 않음
}

🦀 함수에 넘기면 소유권도 함께 이동
fn main() {
let my_string = String::from("hello");
takes_ownership(my_string);
println!("{}", my_string); // ❌ 에러
}
fn takes_ownership(some_string: String) {
println!("{}", some_string);
}
🦀 .clone()을 통해 복사
- .clone()을 사용하면 새로운 힙 데이터를 복제하여 소유권을 넘기지 않고도 값을 사용할 수 있음.
fn main() { let s1 = String::from("hello"); let s2 = s1.clone(); // deep copy println!("{}", s1); // ✅ 가능 }

- 주의할 점
메모리를 새로 할당하기 때문에 값 전체를 복제하므로 성능 비용이 크다!
특히 Vec, String, HashMap 같은 힙 구조체는 .clone() 시 메모리도 많이 소모됨..
가능하면 참조 (&T) 또는 대여 (&mut T) 를 사용하는 것이 좋다..!
🦀 소유권 반환을 통한 관리
fn main() {
let s1 = String::from("hello");
let s2 = takes_ownership(s1);
println!("{}", s2); // ✅ 가능
}
fn takes_ownership(some_string: String) -> String {
println!("{}", some_string);
return some_string;
}'김보근' 카테고리의 다른 글
| One More Second - 탄막 슈팅 게임 웹 서비스 (0) | 2026.02.15 |
|---|---|
| 스터디 4기 - In dark 웹 사이트 기반 게임 만들기 - 로그인 구현 (1) | 2025.08.27 |
| 스터디 4기 - In dark 웹 사이트 기반 게임 만들기 - 기획 단계 (3) | 2025.08.27 |
| React로 닷지(Dodge) 게임 사이트 만들기 (0) | 2025.06.25 |
| 목표 - Rust-React 웹 서버 개발 (1) | 2025.06.11 |
