기본 타입

Rust에는 풍부한원시 타입(Primitives)이 내장되어 있으며, 크게 스칼라 타입복합 타입 두 종류로 나뉩니다.

(하나) 스칼라 타입(Scalar Types)

단독 독립적인 하나의 값을 표현하며 총 6가지 종류가 있습니다:

  • 부호 있는 정수형i8i16i32i64i128isize(크기가 시스템 포인터 크기에 맞춰짐)
  • 부호 없는 정수형u8u16u32u64u128usize(크기가 시스템 포인터 크기에 맞춰짐)
  • 부동 소수점형f32f64
  • 문자형 char:유니코드 스칼라 값 저장(예:'a''α''∞'), 문자 하나당 4바이트 차지
  • 불리언 bool:오직 두 가지 값 truefalse만 가짐
  • 유닛 타입 ():유일한 값은 빈 튜플 ()이다. 겉보기는 튜플이지만 단일 값만 담기 때문에 복합 타입에 속하지 않는다.

(둘) 복합 타입(Compound Types) (뒤에서 학습)

여러 개의 값을 조합해서 만들어진 타입:

  1. 배열:예시 [1, 2, 3]
  2. 튜플:예시 (1, true)

1) 변수 타입 표기 방식

모든 변수에 직접 타입을 지정할 수 있습니다. 숫자 타입은 추가로접미사 표기를 지원하며, 표기를 생략하면 기본 타입이 적용됩니다:

  • 정수 기본 타입:i32
  • 부동 소수점 기본 타입:f64

Rust는 코드 문맥에 따라자동으로 타입 추론하는 기능도 제공합니다.

2) 변수 타입

1. 명시적 타입 표기

변수 이름 뒤에 : 타입 형식으로 직접 타입을 선언하며 모든 변수에 사용 가능합니다.

fn main() {
    let isOpen: bool = true;
    let price: f64 = 1.0;
}Code language: JavaScript (javascript)

위 예시에서 isOpen과 price는 변수이고, 뒤쪽의 : 타입명은 변수 뒤에 명시적으로 타입을 지정하는 문법입니다.

2. 숫자 접미사 타입 표기

숫자 값 뒤에타입 접미사를 붙여 숫자의 타입을 지정하며 오직 숫자에만 사용합니다.

fn main() {
    let an_integer = 5i32;
}Code language: JavaScript (javascript)

이번에는 :로 변수 타입을 지정하지 않고, 할당하는 숫자 뒤에 i32를 붙여 32비트 정수 타입임을 명시했습니다.

3. 타입 기본 규칙

아무 표기나 접미사도 적지 않으면 컴파일러가 기본 타입을 사용합니다:

  • 정수 리터럴 → 기본 i32
  • 부동 소수점 리터럴 → 기본 f64
fn main() {
    let default_float = 3.0;  // 자동으로 f64
    let default_integer = 7; // 자동으로 i32
}Code language: JavaScript (javascript)

4. 문맥 기반 타입 추론

컴파일러가 뒤따르는 코드를 보고 변수의 실제 타입을자동 추론하므로 직접 적을 필요가 없습니다.

fn main() {
    let mut inferred_type = 12;
    inferred_type = 4294967296i64; // 이 줄을 통해 타입이 i64로 추론됨
}Code language: JavaScript (javascript)

가변 변수 & 변수 특징

1 가변 변수

mut 키워드로 수식한 변수는값을 수정할 수 있습니다.

fn main() {
    let mut mutable = 12;
    mutable = 21; // 정상, 값 수정
}Code language: JavaScript (javascript)

2 타입은 변경 불가

변수는한 번 타입이 정해지면 프로그램 실행 내내 바꿀 수 없으며, 다른 타입 값을 할당하면 즉시 컴파일 오류가 발생합니다.

fn main() {
    let mut mutable = 12;
    mutable = 21; // 정상, 값 수정
    mutable = true; // 오류: 원본 타입이 i32이므로 bool 할당 불가
}Code language: JavaScript (javascript)
C:\Users\Jack\Desktop\rustdemo>rustc hello.rs
error[E0308]: mismatched types
 --> hello.rs:5:12
  |
3 |     let mut mutable = 12;
  |                       -- expected due to this value
4 |     mutable = 21; // 정상, 값 수정
5 |     mutable = true; // 오류: 원본 타입이 i32이므로 bool 할당 불가
  |               ^^^^ expected integer, found `bool`

error: aborting due to 1 previous error

For more information about this error, try `rustc --explain E0308`.Code language: JavaScript (javascript)

주의사항

Rust에서 변수의 값은 기본적으로 수정 불가능하며, 값을 바꾸고 싶다면 mut 키워드를 붙여야 합니다. 이 점은 다른 언어와 차이가 있습니다.

아래 코드는 다른 언어에서는 자주 쓰이지만 Rust에서는 오류가 발생합니다

fn main() {
    let mutable:i32 = 12;
    mutable = 21; // 정상, 값 수정
}Code language: JavaScript (javascript)

컴파일 오류

C:\Users\Jack\Desktop\rustdemo>rustc hello.rs
error[E0384]: cannot assign twice to immutable variable `mutable`
 --> hello.rs:4:2
  |
3 |     let mutable:i32 = 12;
  |         ------- first assignment to `mutable`
4 |     mutable = 21; // 정상, 값 수정
  |     ^^^^^^^^^^^^ cannot assign twice to immutable variable
  |
help: consider making this binding mutable
  |
3 |     let mut mutable:i32 = 12;
  |         +++

warning: variable `mutable` is assigned to, but never used
 --> hello.rs:3:6
  |
3 |     let mutable:i32 = 12;
  |         ^^^^^^^
  |
  = note: consider using `_mutable` instead
  = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default

warning: value assigned to `mutable` is never read
 --> hello.rs:4:2
  |
4 |     mutable = 21; // 정상, 값 수정
  |     ^^^^^^^^^^^^
  |
  = help: maybe it is overwritten before being read?
  = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default

error: aborting due to 1 previous error; 2 warnings emitted

For more information about this error, try `rustc --explain E0384`.Code language: JavaScript (javascript)

3 변수 섀도잉(Shadowing)

동일한 이름 변수를 let로 다시 선언하면 기존 변수가섀도(가려짐) 처리됩니다. 두 변수는 완전히 분리된 존재이므로 타입을 다르게 쓸 수 있습니다.

fn main() {
    let mutable = 12;
    let mutable = true; // 위쪽 i32 변수를 섀도, 새 변수 타입은 bool
}Code language: JavaScript (javascript)

복합 타입:배열 & 튜플

1. 배열

  • 문법 형식:[요소타입; 길이]타입과 길이가 고정이며 모든 요소는 같은 타입이어야 한다.
let my_array: [i32; 5] = [1, 2, 3, 4, 5];Code language: JavaScript (javascript)

2. 튜플

  • ()로 감싸며 여러 가지 다른 타입의 값을 보관할 수 있다.
let my_tuple = (5u32, 1u8, true, -5.04f32);Code language: JavaScript (javascript)

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다