Rust Ownership(소유권)

2025. 7. 10. 20:35·김보근

🦀 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
'김보근' 카테고리의 다른 글
  • 스터디 4기 - In dark 웹 사이트 기반 게임 만들기 - 로그인 구현
  • 스터디 4기 - In dark 웹 사이트 기반 게임 만들기 - 기획 단계
  • React로 닷지(Dodge) 게임 사이트 만들기
  • 목표 - Rust-React 웹 서버 개발
이제부터100도씨
이제부터100도씨
zglzgl 님의 블로그 입니다.
  • 이제부터100도씨
    지글지글
    이제부터100도씨
  • 전체
    오늘
    어제
    • 분류 전체보기 (22)
      • 김동훈 (6)
      • 김동주 (3)
      • 김보근 (6)
      • 임동윤 (1)
      • 임이삭 (4)
      • 오성찬 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 스터디 소개글
  • 링크

  • 공지사항

    • 지글지글 3기 공지사항
    • 지글지글 4기 공지사항
  • 인기 글

  • 태그

    bug
    cursor
    rust
    스터디 3기
    chat
    Gorilla
    EC2
    개발
    Web
    로드밸런서
    cardgorilla
    Card
    Editor
    selenium
    zgl
    Tool
    Python
    ELB
    AWS
    error
    js
    coding
    fix
    Loading
    AI
    IT
    Younique
    웹크롤링
    3기
    in-dark
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
이제부터100도씨
Rust Ownership(소유권)
상단으로

티스토리툴바