본문 바로가기
개발/러스트 (Rust)

Rust 기본, 데이타 타입 (Scalar, Compound, Unit)

by 레조 2024. 5. 27.

https://rustacean.net/

 

Rust 기본 : 데이타 타입 (Scalar, Compound, Unit)

 

스칼라 데이터 타입 (Scalar Data Types )

단일 값을 나타내는 타입입니다.

정수형(integers), 부동소수점 수(floats), 불리언(booleans), 그리고 문자(characters)가 스칼라 타입에 속합니다.

 

복합 데이터 타입 (Compound Data Types)

여러 값을 그룹화하여 하나의 타입으로 나타내는 데이터 타입입니다.

Rust에서는 주로 튜플(tuple)과 구조체(struct)를 사용하여 복합 데이터 타입을 구현합니다.

 

유닛 타입 (Unit Data Type)

1. 값이 없음을 나타냅니다.

유닛 타입은 실제로 어떤 데이터도 담지 않으며, 오직 한 가지 값만을 가질 수 있습니다. 

ex) let unit = ();


2. 암시적 반환

함수에서 반환 값이 명시적으로 지정되지 않았다면, 러스트 컴파일러는 자동으로 유닛 타입을 반환값으로 사용합니다.

// 두 함수는 동일한 함수입니다.
fn do_nothing() -> () {
}
// 함수 반환 타입을 생략할 수 있습니다.
fn do_nothing() {
}


3. 타입 시스템의 일부

러스트의 타입 시스템 내에서, 유닛 타입은 값이 없음을 표현하는 유일한 방법입니다.

이는 러스트가 타입 안정성을 중시하는 언어임을 반영합니다.

 


 

CODE

fn main() {

    //-- 스칼라 데이터 타입 (single value)
    // boolean
    let b1: bool = true;

    // 0을 포함하는 자연수 (unsigned integers)
    let ui1: u8 = 1;
    let ui2: u16 = 1;
    let ui3: u32 = 1;
    let ui4: u64 = 1;
    let ui5: u128 = 1;

    // 정수 (signed integers)
    let si1: i8 = -1;
    let si2: i16 = -1;
    let si3: i32 = -1;
    let si4: i64 = -1;
    let si5: i128 = -1;
    
    // 부동 소수 (floating point numbers)
    let f1: f32 = 1.0; // 10진수 정밀도 6 ~ 9자리
    let f2: f64 = 1.0; // 10진수 정밀도 15 ~ 17자리

    // 플랫폼에 따라 가변하는 정수 (platform specific integers)
    let p1: usize = 1;
    let p2: isize = 1;

    // 문자(characters), 문자열 슬라이스($str), 문자열 객체(String)
    let c1: char = 'c';
    let s1: &str = "hello"; // string slice
    let s2: String = String::from("hello");


    //-- 복합 데이터 타입 (multiple value)
    // arrays (동일한 타입의 여러 값을 저장)
    let a1: [i32; 5] = [1, 2, 3, 4, 5];
    let a1 = [1, 2, 3, 4, 5];
    
    let i1 = a1[4];

    // tuples (다른 타입의 여러 값을 저장)
    let t1 = (1, 2, 3);
    let t1 = (5, 5.0, "5");

    let s1 = t1.2;
    let (i1, f1, s1) = t1;


    //-- 유닛 타입
    // 빈 튜플은('()') 유닛 타입이라고 불리는 특별한 타입입니다.
    // 유닛 타입은 다른 의미 있는 값이 반환될 수 없을 때 암시적으로 반환합니다.
    let unit = ();

    // 타입 별명 (Type aliasing)
    type Age = u8;
    let a1: Age = 57;
}