blog

Rust 데이터 유형

Rust에서 모든 값은 데이터 타입입니다. 이는 데이터가 어떤 종류의 데이터로 지정되어 있는지 Rust에 알려주므로 데이터가 처리되는 방식을 더 잘 지정할 수 있습니다....

Oct 24, 2025 · 4 min. read
シェア

데이터 타입

Rust에서 모든 값은 데이터 타입입니다. 이는 데이터가 어떤 종류의 데이터로 지정되는지 알려주어 데이터 처리 방식을 더 잘 지정할 수 있게 해줍니다.

데이터 유형에는 스칼라 및 컴포지트의 두 가지 하위 집합이 있습니다.

스칼라 타입

스칼라 타입은 개별 값을 나타내며, Rust에는 네 가지 기본 스칼라 타입이 있습니다:

  • 정수
  • 부동 소수점
  • Boolean
  • 문자 유형

정수

숫자 유형은 기본값이 i32입니다.

8-biti8u8
i16i16u16
i32i32u32
i64i64u64
i128i128u128
archisizeusize

각 이형 상품은 서명되거나 서명되지 않은 값을 가져야 합니다.

부호화된 비트 변형은 -)에서 2^ - 1까지의 숫자를 저장할 수 있고 부호화되지 않은 비트 변형은 2^n - 1까지의 숫자를 저장할 수 있습니다.

isize 및 usize 유형은 프로그램이 실행되는 컴퓨터의 아키텍처에 따라 달라집니다(예: 64비트 아키텍처에서는 64비트, 32비트 아키텍처에서는 32비트).

여러 숫자 유형의 숫자 리터럴에는 66i8과 같은 유형 접미사를 사용할 수 있습니다.

정수 오버플로

Rust는 정수 오버플로 문제도 겪습니다.

  • 디버그 모드에서 코드를 컴파일할 때 정수 오버플로 패닉 발생
  • Rust는 정수 오버플로 패닉 없이 릴리스 모드에서 코드를 컴파일하는데, 여기서 Rust는 이진 보완 연산을 수행하여 해당 유형이 보유할 수 있는 최대값보다 큰 값은 최소값으로 반올림합니다(예: 최대값이 , 이고 값이 에 바인딩된 경우 , 로 변경되는 등의 방식으로). 이 접근 방식은 Rust가 릴리스 모드에서 정수 오버플로에 대한 당황 없이 코드를 컴파일하는 이유를 설명합니다. 하지만 문제는 변수가 예상한 값을 얻지 못할 수 있다는 것입니다.
  • 정수 오버플로 오류에 대한 명시적인 해결책은 표준 라이브러리에서 제공하는 다음과 같은 원시 숫자 유형 메서드를 사용하면 찾을 수 있습니다:
    • wrapping_* 메서드
    • checked_* 메서드
    • overflowing_* 메서드
    • saturating_* 메서드

부동 소수점

부동 소수점 유형은 기본적으로 f64입니다. 모든 부동 소수점 유형은 부호화됩니다.

Rust에는 부동 소수점 숫자의 두 가지 유형, 즉 f32와 f64가 있습니다.

fn main() {
 let x = 64.0; // f64
 let y: f32 = 32.0; // f32
}

Boolean

Rust에는 참과 거짓의 두 가지 부울 유형이 있으며, 부울을 사용하여 유형을 표현합니다.

fn main() {
 let t = true;
 let f: bool = false;
}

문자 유형

문자 유형에 문자 사용

fn main() {
 let c = 'z';
 let str: char = 'char';
}

문자 리터럴은 작은따옴표를 사용하여 선언하고, 큰따옴표는 문자열 리터럴을 선언합니다.

복합 유형

복합 유형은 여러 값을 단일 유형으로 조합한 것으로, Rust에는 배열과 튜플이라는 두 가지 기본 유형이 있습니다.

배열

튜플은 여러 다른 유형의 값을 하나의 복합 유형으로 결합하는 주요 방법입니다.

튜플의 길이가 고정되면 다른 언어처럼 길이가 늘어나거나 줄어들지 않습니다.

fn main() {
 let tuple: (i32, f64, u8) = (123, 32.1, 1);
}

튜플에서 단일 값을 얻으려면 패턴 매칭을 사용하여 튜플을 해체하면 됩니다.

fn main() {
 let tuple = (123, 32.1, 1);
 
 let (x, y, z) = tuple;
 
 println!("The value of x is: {x}"); // 123
}

를 사용할 수도 있습니다. 값 인덱싱을 추가하여 단일 값을 가져올 수도 있습니다.

fn main() {
 let tuple = (123, 32.1, 1);
 
 let x = tuple.0;
 
 let y = tuple.1;
 
 let z = tuple.2;
}

값이 없는 튜플을 단위 튜플이라고 하며, 값과 해당 유형은 모두 ()로 표기합니다.

fn main() {
 let tuple: () = ();
}

배열

다른 언어와 마찬가지로 배열 유형은 배열 내 요소의 유형이 일관성이 있어야 합니다. 차이점은 Rust에서 배열의 길이는 고정되어 있으므로 불변이라는 것입니다.

fn main() {
 let a = [111, 222, 333];
}

배열은 스택에 공간을 할당하거나 예약된 요소의 수를 고정하고 싶을 때 유용합니다. 하지만 배열은 벡터 유형만큼 유연하지 않습니다.

벡터 유형은 표준 라이브러리에서 제공하는 배열과 같은 컬렉션 유형으로, 길이를 늘리거나 줄일 수 있습니다.

배열 유형은 각 요소의 유형을 포함하는 대괄호 뒤에 배열 요소의 개수를 사용하여 다음과 같이 작성할 수 있습니다.

let arr: [i32, 5] = [1, 2, 3, 4, 5];

대괄호 안에 초기 값을 지정하고 요소 수를 추가하여 각 요소에 대해 동일한 값을 갖는 배열을 만들 수도 있습니다:

let arr = [3;5]; // 다음과 같습니다.[3, 3, 3, 3, 3]

인덱스로 요소에 액세스하려고 할 때 Rust는 지정된 인덱스가 배열의 길이보다 작은지 확인합니다. 인덱스가 배열의 길이를 초과하면 Rust는 패닉 상태에 빠집니다.

이러한 오류 처리 메커니즘을 통해 프로그램이 당황하거나 불법적인 메모리 액세스를 유발하지 않도록 할 수 있습니다.

Read next

산타, GenAI를 만나다: 빅 언어 모델, LangChain 및 Elasticsearch로 손으로 쓴 크리스마스 편지 해독하기

북극의 한가운데서 산타의 엘프 팀은 전 세계 어린이들이 보낸 수백만 통의 편지를 어떻게 처리할 것인가라는 거대한 물류 문제에 직면했습니다. 산타는 결연한 표정으로 크리스마스 작전에 인공 지능을 도입하기로 결심합니다. 산타가 최신 AI 기술이 탑재된 컴퓨터에 앉아 있습니다.

Oct 24, 2025 · 6 min read