반응형

Rust에서는 스칼라 데이터 타입을 사용한다.

 

스칼라란, 단 하나의 값만을 저장할 수 있는 데이터 타입을 스칼라(Scalar) 데이터 타입이라 한다.

쉽게 C나 Typescript처럼 변수에 넣을 수 있는 타입을 정해줄 수 있다는 것이다.

 

Rust에서는 정수형, 부동소수점 숫자, boolean, 그리고 문자 이렇게 총 4개의 데이터 타입을 가지고 있다.


1. 정수형

길이 Signed(부호있는) Unsigned(부호없는)
8-bit i8 u8
16-bit i16 u16
32-bit i32 u32
64-bit i64 u64
arch isize usize

정수형은 이러한 데이터 표현 방식을 가지고 있다.

하나를 예로 들어보자면, i8이나 u8을 사용 하려면 길이가 8비트인 정수를 사용해야한다. 그렇기 때문에

i8타입은 부호가 있으니은 -(2^7) 에서 2^7- 1 까지의 값, 즉 -128 에서 127 사이의 값을 저장할 수 있고
u8타입은 부호가 없으니 0 에서 28 - 1, 즉 0 에서 255 까지의 값을 저장할 수 있다.

친절한 컴파일러는 범위도 알려주고 대체할 형식까지도 알려준다.

 

isize와 usize타입은 프로그램이 동작하는 컴퓨터 환경에 따라 결정된다.

64-bit 아키텍처이면 64bit를, 32-bit 아키텍처이면 32bit를 갖게 된다.

내 컴퓨터는 64bit이기 때문에 isize를 사용하면 부호있는 64비트 정수, 즉 i64와 동일한 범위를 가지게 되고

64비트의 최대 표현범위를 벗어난 수를 대입하니 컴파일러가 범위와 오류를 알려준다.

 

아래는 수 표현 형식이다. C에서 16진수를 0x12이런 식으로 표현하고, 8진수를 01234 이렇게 표현하는 것과 같다.

Number literals Example
Decimal 98_222
Hex 0xff
Octal 0o77
Binary 0b1111_0000
Byte (u8 only) b'A'

정수를 사용할때는 특정 범위를 넘지 않는다면 i32가 무난하고 가장 좋고 빠르다고 한다. 


2. 부동 소수점 타입

Rust의 부동소수점 타입은 f32(C에서 float)와 f64(C에서 double)로, 정수처럼 각각 32bit와 64bit의 크기를 갖는다.

기본 타입은 f64인데, 그 이유는 최신의 CPU 에서는 f64가 f32와 대략 비슷한 속도를 내면서도 더 정밀한 표현이 가능하기 때문이다.

 

f32 타입은 1배수의 정밀도인 부동소수점이고, f64는 2배수의 정밀도인 부동소수점입니다. 이건 무슨 소리인지 모르겠음

이렇게 Clion에서는 반환값에 따라 자동으로 데이터 타입을 정해준다. 직접 선언하면서 쓴게 아니라 Clion에서 저렇게 보여주기만 하는 것이다.

 

마지막 구문에 대해서는 직접 컴파일 해보자.


3. Boolean 타입

다른 언어들과 동일하게 true, false 이 두개의 값을 가질 수 있다. 타입명은 "bool"이다


4. 문자 타입

C와 다르게 Rust에서는 문자 방식이 Unicode Scalar를 사용하기 때문에, 특수문자 및 이모지등 다양한 문자 표현이 가능하다.

결과

Rust에서 문자열은 큰 따옴표로, 문자는 작은 따옴표로 표현한다. 이 부분은 C와 동일하다.


5. 튜플

튜플은 다양한 타입의 몇 개의 숫자를 집합시켜 하나의 복합 타입으로 만드는 일반적인 방법이다.

사용하는 방법은 다양하게 있고, 자기가 원하는 문법이나 팀에서 사용하는 문법을 사용하면 좋을 것 같다.


6. 배열

배열은 튜플과 다르게 모든 요소는 모두 같은 타입이여야 한다. (이것은 모든 언어에서의 공통점)

하지만 Rust에서는 배열의 특이사항이 하나 있는데 그것은 바로 배열의 길이는 고정된 길이를 가져야한다.

한마디로 상수, 변하지 않는 값들을 다룰 때 사용해야한다. 예) 매 달, 손가락 개수(엄지, 검지, 중지...) 등...

 

하지만 프로그래밍 하면서 배열의 길이가 다를 때를 더 많이 사용하게 될텐데 그때는 벡터를 사용해야한다.(나중에 나옴)

 

배열은 stack에 할당되고 색인을 통해 접근할 수 있다.

다른 프로그래밍 언어와 동일

 

만약 배열의 길이보다 더 큰 색인으로 접근하면 어떻게 될까?

색인을 사용하여 요소에 접근하려고 하면 Rust는 지정한 색인이 배열 길이보다 작은지 확인한다. (5 < index)

색인이 길이보다 길면 Rust는 프로그램이 오류와 함께 종료 될 때 Rust가 사용하는 용어인 패닉(panic)되었다 라고 한다.

Rust는 메모리 접근을 허용하고 계속 진행하는 대신 유효하지 않은 메모리에 액세스 하게되면 즉시 종료하여 이러한 종류의 오류로부터 사용자를 보호한다. (배열의 길이 관련된 취약점 불가능)

반응형