Back-End/Rust

[Rust] 3장 빌림(Borrowing)

Tinkies 2025. 2. 27. 23:01

1. 빌린(Borrowing) 개념

Rust에서 "빌림(borrowing)" 은 메모리 안정성을 보장하기 위해 중요한 개념으로 Ownership(소유권) 시스템을 통해 메모리 관리를 수행하며, 빌림은 소유권을 이전하지 않고 데이터를 접근할 수 있도록 합니다.

 

  • 불변 빌림(Immutable Borrowing): 데이터를 변경하지 않고 읽기만 할 때 사용함, 여러 개의 불변 참조를 동시에 가질 수 있음
  • 가변 빌림(Mutable Borrwoing): 데이터를 변경할 때 사용, 단 하나의 가변 참조를 가질 수 있으며, 불변 참조와 동시에 존재할 수 없음

2. 빌림의 규칙

  • 불변 참조는 여러 개 가질 수 있음
  • 가변 참조는 단 하나만을 가질 수 있으며, 불변 참조와 동시에 존재할 수 없음
  • 빌림은 반드시 함수 또는 코드 블록의 범위 내에서만 유효

3. 빌림의 예제

Rust에서 빌림을 사용하는 방법은 간단합니다.

fn main() {
    let mut x = 5;

    // 불변 빌림
    let y = &x; // x를 불변으로 빌림
    println!("y: {}", y); // y는 x의 값을 읽을 수 있음

    // 가변 빌림
    let z = &mut x; // x를 가변으로 빌림
    *z += 1; // z를 통해 x의 값을 변경할 수 있음
    println!("x: {}", x); // x의 값은 6
}
  • 불변 빌림(Imutable-borrowing)
fn main() {
    let s = String::from("Hello");

    let r1 = &s; // 불변 참조
    let r2 = &s; // 또 다른 불변 참조

    println!("r1: {}, r2 {}", r1,r2);
}
  • 가변 빌림(mutable-borrowing)
fn main() {
    let mut s = String::from("Hello");

    let r1 = &mut s; // 가변 참조
    r1.push_str(", World!"); // r1을 통해 s를 수정

    println!("{}", r1); // "Hello, World!"
}
  • 빌림 규칙 위반 예제
fn main() {

    let mut s = String::from("Hello");

    let r1 = &mut s; // 가변 참조
    let r2 = &s; // 불변 참조 (여기서 오류 발생)

    println!("{}, {}", r1, r2); // error: 불변 참조와 가변 참조를 동시에 사용
}

요약

  • 빌림은 Rust의 Ownership 시스템의 핵심 개념으로, 메모리 안정성을 보장
  • 불변 빌림과 가변 빌림이 있으며, 각기 다른 규칙을 따름
  • 빌림 규칙을 위반하면 컴파일 오류가 발생하며, 런타임 오류를 방지
 

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

 

LIST