이 글에서는 Rust 언어를 배우며 얻은 것들을 공유하려고 합니다. 주로 Rust Book을 통해 학습을 진행할 예정입니다.
Rust Book-Foreword에서는 러스트 언어의 장점을 아래와 같이 설명합니다.
개인적으로 느낀 Rust 언어는
그렇다면 Rust언어에 대해 조금 더 깊이 내려가보겠습니다.
// 오류가 발생합니다.
let testVar = 5;
testVar = 6;
// 오류가 발생하지 않습니다.
let mut testVar = 5;
testVar = 6;
fn main() {
const THREE_HOURS_IN_SECONDS: u32 = 60 * 60 * 3;
}
// 상수의 경우 mut 키워드를 사용할 경우 오류가 발생합니다.
fn main() {
const mut THREE_HOURS_IN_SECONDS: u32 = 60 * 60 * 3;
}
const THREE_HOURS_IN_SECONDS: u32 = 60 * 60 * 3;
fn main() {
let testVar = 10;
}
// 변수의 타입을 자동으로 추론합니다.
fn main() {
// 이때 i8~i128, u8~u128 타입이 가능성이 있는데,
// 기본적으로 정수의 경우 타입 명시를 하지 않는다면 i32 타입을 갖습니다.
let x = 2;
// 부동소수점의 경우 f32가 Default Type 입니다.
let y = 3.0; // f32
}
//이 경우에는 Type Error가 발생합니다.
fn main() {
let mut testVar = " ";
testVar = 5;
}
// 같은 이름의 변수를 새로 선언해도 오류가 아닙니다. (Shadowing)
fn main() {
let testVar = " ";
let testVar = 5;
}
```rust
// 조금 더 자세히 알아보자면, 만약 shadowing으로 교체된 변수가 Heap영역을 차지하고 있다면...
fn main() {
{
let s = String::from("hello"); // s는 힙 메모리를 사용하므로
let s = 5; // 이전 s는 Scope를 벗어나게 되므로 drop이 호출됩니다.
} // 여기서 새로운 s는 Scope를 벗어나게 됩니다.
}
Scalar Type
Rust에는 네 가지의 스칼라 타입의 자료형이 있습니다. Integer, floating-point number, Boolean, character 입니다. 이 자료형은 메모리상의 Stack에서 관리됩니다.
Compound Type
두 가지의 Compound Type을 지원합니다. Tuple, Array 입니다. 두 자료구조의 차이는, Tuple의 경우 각 엘리먼트가 다른 데이터타입을 갖도록 허용하고, Array의 경우 모든 Element가 같은 테이터타입을 갖도록 합니다.
fn main() {
// 각 element별 타입을 다르게 지정할 수 있습니다.
let tup: (i32, f64, u8) = (500, 6.4, 1);
}
fn main() {
// 타입을 명시하지 않았지만 타입추론을 통해 각 엘리먼트별 Type이 추론됩니다.
let tup = (500, 6.4, 1);
// Tuple의 Decomposing도 가능합니다.
let (x, y, z) = tup;
}
fn main() {
let x: (i32, f64, u8) = (500, 6.4, 1);
let five_hundred = x.0;
let six_point_four = x.1;
let one = x.2;
}
fn main() {
// 각 element별 타입이 모두 같아야합니다.
let months = ["January", "February", "March", "April", "May", "June", "July",
"August", "September", "October", "November", "December"];
}
fn main() {
// 타입과 길이를 직접 명시할 수 있습니다.
let a: [i32; 5] = [1, 2, 3, 4, 5];
}
fn main() {
let a = [1, 2, 3, 4, 5];
let first = a[0];
let second = a[1];
}