본문 바로가기
개발/Rust

[Rust] 데이터 기본 타입

by 77monkey 개발자 2023. 9. 2.
반응형

Rust의 데이터 기본 타입에 대해서 알아보도록 하겠습니다. 참고로 Rust 말고 다른 언어를 배워보신 분들을 기준으로 작성한 것이라 혹시나 언어를 처음 접하신 분들에게는 좀 어려울 수 있습니다. 

 

데이터 기본 타입 미리보기

다른 프로그래밍 언어를 배우셨다면 크게 어렵게 다가오지 않으실 것으로 보입니다. 제 주언어는 C언어인데, Rust에서는 char가 1Byte가 아닌 4Byte로 표현이 되고 이를 통해서 유니코드 모든 문자를 표현할 수 있습니다. 신기한 건 그렇다고 u32 타입이 아니라는 점입니다.

추가로 isize와 usize라는 것이 있는데 우리가 매번 컴퓨터에 프로그램을 설치할 때 32bit 설치할지, 64bit를 설치할지 선택하는 것처럼 그 플랫폼에 따라서 size의 크기가 32bit가 될지 64bit가 될지 나뉘게 됩니다. 나머지는 크게 다른 점이 없다고 생각합니다.

Type Type에 대한 설명
i8, i16, i32, i64, i128 부호 있는 정수 타입
u8, u16, u32, u64, u128 부호 없는 정수 타입
isize, usize 플랫폼에 따라서 크기가 변하는 정수 타입
f32, f64 부동 소수점 타입
char 유니코드 문자
bool true, false의 boolean type

 

정수 타입

i#, u#로 표현이 될 때(#은 숫자를 의미함), i는 부호 있는 정수를 의미하고 u는 부호 없는 정수를 의미합니다. #은 비트 단위를 의미하게 됩니다. 

예를 들면 i16은 부호가 있는 16bit 타입을 의미합니다. u32는 부호가 없는 32bit 타입을 의미합니다. 

usize와 isize는 위에서 살짝 이야기를 했지만, 플랫폼에 따라서 부호가 있거나 없는 32bit 또는 64bit가 됩니다. 즉 같은 코드라도 돌아가는 플랫폼에 따라서 값이 달라질 수 있는 데이터 타입입니다. 

배열의 index는 무조건 usize 값이어야 합니다. usize가 아니더라도 될 것 같은데 Rust만의 특성인가 봅니다. 

 

정수 리터럴

정수 리터럴은 정수를 표현하는 방법입니다. 예를 들면 32, 10000000, 0b101010, 0x15, 0o2 입니다. 

정수 리터럴 뒤에 위에서 배운 기본 타입을 붙여서 정수 리터럴이 어떤 타입인지 확인할 수 있습니다. 예를 들면 32u32처럼 정수 리터럴 뒤에 타입을 작성함으로써 데이터 타입을 명시적으로 정할 수 있습니다. 그렇지 않은 경우에는 Rust 컴파일러가 계속 유추를 해야 하는데 기본적으로 설정되는 타입은 i32입니다. 그렇기 때문에 i32가 아닌 부호 없는 타입이 필요한 경우에는 꼭 타입을 명시해줘야 합니다. 

제가 가장 편리하다고 느낀 것은 바로 밑줄입니다. 다른 프로그래밍 언어로 개발을 하시다 보면 숫자를 사용하거나 주소를 적을 때가 필요한데, 이 때 숫자가 길어지거나 하면 실수할 확률이 좀 늘어나서 조심하던 기억이 있습니다. 그런데 그런 애매한 부분에 _(밑줄)을 넣으시면 됩니다. 예를 들면 1_000_000u32 이런 식으로 사용할 수 있습니다. 어떠신가요? 확실히 가독성이 좋아지지 않았나요? 저는 너무 맘에 드는 부분이었습니다. 

 

as 연산자

정수 타입을 다른 정수 타입으로 변환할 때 as 연산자를 사용합니다. 

예를 들면 10_i32 as u64 이런 식으로 사용할 수 있습니다. 

 

부동소수점 타입

부동 소수점 타입은 f32와 f64가 있습니다. C언어/C++를 하셨다면 float, double이 생각나셨을텐데 맞습니다. 

부동 소수점을 혹시 리터럴로 표현하시고 싶으시면 3.14, 2.0, 5.23e2(5.23 * 10 ^ 2)와 같이 표현하시면 됩니다. 

f32, f64는 INFINITY, NEG_INFINITY, NAN(수가 아닌 값?), MIN, MAX를 상수값으로 정의해 두어서 사용하실 수도 있습니다.

 

char 타입

char 타입은 유니코드를 32bit 값으로 표현합니다. C언어/C++에서 문자열도 char 타입으로 표현을 했지만 Rust에서는 UTF-8 바이트 시퀀스로 표현을 합니다. 그렇기 때문에 char 문자 배열이 아니라는 점을 아셔야 합니다. 

char 타입은 as 연산자를 통해서 정수 타입으로 변환할 수 있습니다. 하지만 역인 경우에는 정수(u8)만 as 연산자를 사용하여 char 타입으로 바꿀 수 있습니다. 

 

bool 타입

bool 타입은 true, false로써 2가지 밖에 없습니다. 그렇지만 8bit (= 1Byte)로 표현이 됩니다. bool 타입은 위에서 배운 as 연산자를 통해서 정수 타입으로 변환이 되지만, 역은 성립하지 않습니다. 그렇기 때문에 나중에 배울 조건문이나 반복문에서 조건의 결과는 항상 bool 타입이 되어야 합니다.

 

마무리

Rust의 기본 타입에 대해서 알아보았습니다. 정수 타입, 부동 소수점 타입, char 타입, bool 타입 이렇게 크게 4가지에 대해서 알아보았습니다. 다른 언어와 같으면서 다른 부분이 있기 때문에 잘 알아 두시면 좋을 것으로 보입니다.

반응형

'개발 > Rust' 카테고리의 다른 글

[Rust] if 문  (0) 2023.09.04
[Rust] 변수 선언  (0) 2023.09.03
[Rust] hello world 출력하기  (0) 2023.09.01
[Rust] Cargo, Cargo 명령어  (0) 2023.08.31
[Rust] Rust window 설치 방법  (0) 2023.08.29