개요
Rust는 C/C++를 기반으로 하는 OS와 같은 시스템 소프트웨어를 개발하기에 적합한 언어라고 한다.
필자는 주로 C를 사용해 Kernel이나 Driver를 다루었어서, Rust를 배우는데엔 큰 문제가 될 것 같진 않았다.
그러나 필자의 생각과는 다르게 Rust에는 C와는 다른 많은 철학들이 담겨져 있었으며, 그것을 이해하기 위해서 C의 지식만을 가지고 이해하기엔 다소 벅찼었다..ㅠ
Python에서 사용하는 immutable이나 mutable과 같은 용어도 이번 Rust의 변수들을 다루어보면서 처음 접해보았다.
어렵지만 그래도 변수 하나를 선언하는데에도 Rust의 뜻이 있을테니 잘 따르기로하였다.
(예전 Python으로 간단한 프로그램을 짰을땐 immutable이나 mutable을 크게 신경쓰지 않았었는데, Rust는 좀 신경써줘야 한다..ㅠ)
서론이 길었지만 아무튼 본 페이지에서는 Rust의 변수들에 대한 설명과 변수를 지정할 때 사용되는 immutable과 mutable에 대해서 설명하고자 한다.
Rust에는 let과 let mut 그리고 const라는 변수 키워드를 지원한다.
각 키워드에 대한 설명은 아래 단락에서 설명한다.
let
Rust에서 let으로 선언되는 변수는 immutable 변수로 값을 수정할 수 없는 변수가 된다.
즉, let 키워드로 선언된 변수에 값이 한번 담기게 되면 해당 변수는 다른 값으로 수정될 수 없다는 뜻이다.
let a = 1;
위 코드 블록과 같이 a라는 변수를 let 키워드로 선언하게 되면, a는 immutable 변수가 된다.
그리고 추가로 a에는 1이라는 값이 담겨짐으로 Rust 엔진에서 추론되어 최종적으로 immutable 정수형 변수가 되어진다.
또한, 앞서 설명하였다시피 let은 immutable 임으로 값이 수정될 수 없는 변수임으로
let a = 1;
a = 2;
위와 같은 코드는 컴파일 타임에 에러가 발생한다.
이런 코드를 보면은 C의 const 키워드를 생각할 수 있겠지만 const 키워드와는 다른 차이점이 존재한다.
이에 대한 내용은 아래 단락에서 설명한다.
let mut
Rust에서 let mut으로 선언되는 변수는 mutable 변수로 값을 수정할 수 있는 변수가 된다.
즉, let mut 키워드로 선언된 변수는 런타임 시에 값이 수정될 수 있는 가변 변수이다.
let mut a = 1;
a = 10;
앞선 let 키워드와 다르게 let mut 키워드로 선언된 변수는 위와 같은 코드 블록을 지원한다.
가장 첫 줄인 a가 1일 때 사용되지 않았다는 Warning을 발생시키긴 하지만 컴파일 타임에 에러가 발생하진 않는다.
const
Rust에서 const로 선언되는 변수는 constant 변수로 이름과 같이 상수형 변수가 된다.
즉, 해당 키워드는 C에서 사용되는 const와 유사한 기능을 한다.
const a = 1;
해당 a 변수는 1이 담기며 절대로 수정될 수 없는 상수형 변수가 된다.
여기서 let과의 차이점이 궁금한 독자들이 있을 것이다.
let과 const의 차이점은 컴파일 타임과 런타임에서 변수의 타입이 결정된다는 것이다.
즉, let은 런타임 시에 변수의 타입이 최종적으로 결정되고 const는 컴파일 타임에 변수의 타입이 결정된다.
let a;
a = 10;
const b;
b = 10;
코드로 설명하자면 let으로 선언된 a 변수는 런타임 시에 변수의 타입이 최종 결정됨으로 두번째 라인과 같이 a = 10;은 에러가 발생하지 않을 것이다.
하지만, const로 선언된 b 변수는 컴파일 타임시에 변수의 타입이 최종 결정됨으로 네번째 라인과 같이 b = 10;은 에러가 발생하게 된다.
type
Rust 엔진은 추론을 통해 let, let mut, const 변수들의 최종 타입을 결정하게 된다.
하지만, 꼭 엔진에 타입 추론을 맡기지 않아도 되며 개발자가 직접 타입을 결정할 수도 있다.
let a : i32 = 1;
let mut b : u32 = 1;
const c : f32 = 0.1;
위와 같은 문법을 통해 특정 변수들의 데이터 타입들을 명시해줄 수도 있다.
'Programming > Rust' 카테고리의 다른 글
[Rust] Method와 Function의 차이 (0) | 2024.10.15 |
---|---|
[Rust] 싱글톤 패턴(Singleton-Pattern) 코드 작성법 (1) | 2024.02.09 |
[Rust] 소유권 시스템 (0) | 2023.09.24 |
[Rust] 함수 선언, 파라미터, 리턴 (0) | 2023.08.28 |
[Rust] 기초 학습 사이트 (0) | 2023.07.15 |