[Rust] 변수와 가변성

KimCookieYa·2023년 5월 12일
0

Rust

목록 보기
3/3

2장에서 언급했듯이, 기본 변수는 불변성입니다. 이것은 Rust가 제공하는 안전성과 손쉬운 동시성이라는 장점을 취할 수 있도록 코드를 작성하게끔 강제하는 요소 중 하나입니다. 하지만 여전히 당신은 가변 변수를 사용하고 싶을테죠. 어떻게 그리고 왜 Rust에서 불변성을 애호해주길 권장하는지 알아보면 그런 생각을 포기할 수 있을지도 모르겠습니다.

(The Rust Programming Ranguage - 변수와 가변성)

변수와 가변성

  • Rust의 기본 변수는 immutable(불변성)하다.
  • Rust가 제공하는 안전성손쉬운 동시성이라는 장점을 취할 수 있다.
  • 코드 작성 시 강제되는 요소이다.

변수 선언

let x = 5; // 불변성 변수(기본)
let mut y = 4; // 가변성 변수
  • let: Rust의 변수 선언문
  • Rust에서 변수는 기본적으로 불변(immutable)이다.

불변성(immutable)

let x = 5; 불변성 변수
x = 6; // error[E0384]: re-assignment of immutable variable `x`
  • immutable로 선언한 변수의 값의 변경을 시도하면, 컴파일 에러

Rust에서는 컴파일러가 변경되지 않은 값(immutable)에 대한 보증을 해주고, 실제도 이 값은 바뀌지 않는다. 이것이 의미하는 바는 불변성 변수를 작성할 때 값이 어떻게 변경되는지 추적할 필요가 없기 때문에 코드를 더 합리적으로 만들어준다.

가변성(muttable)

그래도 가변성 변수는 코딩에 필수적이다. 이때, let met으로 가변성 변수를 선언할 수 있다.

fn main() {
    let mut x = 5;
    x = 6;
    println!("value: {}", x); // value: 6
}

mut을 사용하여, x에 bind된 값을 5에서 6으로 변경할 수 있다.

Shadowing

다음의 예제 코드는 앞서 선언한 변수와 같은 이름의 새 변수를 선언한다. 이를 첫 변수가 두 번째 변수에 의해 shadowed됐다고 표현한다.

fn main() {
    let x = 5;
    let x = x + 1;
    let x = x * 2;
    println!("value: {}", x); // value: 12
}

이와 같은 사용은 변수를 mut으로 선언하는 것과 차이가 있다. let을 사용하지 않고서는 변수에 새 값을 대입할 수 없기 때문이다. 또 다른 mut과 shadowing의 차이는 let키워드를 다시 사용하여 효과적으로 새 변수를 선언하고, 값의 유형을 변경하면서도 동일 이름을 사용할 수 있다는 점이다.

let num = 5; // u32
let num = '5'; // char

참고

profile
무엇이 나를 살아있게 만드는가

0개의 댓글