본문 바로가기

Rust

Rust, 자료형 Numeric(정수)

반응형

Rust는 C와 같은 정적언어이다. 하지만, type inference(이하 타입추론)으로 인해서, 

문법자체는 C만큼 strict하지는 않고, compiler가 type을 추측해서, 자동으로 컴파일을 하게 된다. 

 

python이나 javascript같은 경우는 완전한 동적언어라, 

컴파일 단계에서는 type이 맞는지 틀리는지 검사를 하지 않는다. 

duck type이라고 해서, 막상 실행될때 이게 맞는지 틀리는지 확인이 가능하기때문에, 

 

이것이 개발 속도는 빠르지만, 이 부분에서 잠재적인 오류가 있을 수도 있고,

이를 막기 위해서는 모든 부분을 검사하는 테스트셋을 가져야지 된다는 의미이다.

 

동적언어의 장점이자 단점이기도 한데,  Rust는 정적언어이기때문에,

이 타입 관련 오류들은 컴파일 시간에 잡아낸다. 

 

그게 일단 어떻게 든 돌아가는 prototype을 만드는 경우는 동적언어들이 유리하고, 

완성도를 요하는 것이면 이게 상대적으로 느리지만, 이런 정적언어가 유리한 점이 있게 되는 것이다. 

 

그리고 다른 하나는 function이 generic type이라는 것이다. 동적언어들은 굳이 generic이 아니지만, 

duck type때문에 런타임에 결정하지만, 이 rust는 정적언어이기에 컴파일 타임에 결정을 해야한다.

그래서 compile time에 예측 가능한 모든 type별로 함수를 만들어 내게 된다.

이렇게 하는 것은 실제 작성자가 느끼기에는 동적언어같이 쓰지만 정적언어로 동작하는 장치인것이다. 

이것을 generic function이라고 이야기한다.  

 

Interger Type

 

Type Range Type Range
u8 0~255  i8 -128 ~ 127 
u16 0~65536 i16 -32768 ~ 32767
u32 0~(2^32-1) i32 -2^31 ~ (2^31-1)
u64 0~(2^64-1) i64 -2^63 ~ (2^63-1)
usize 0 to (2^32-1 or 2^64-1) isize i32 or i64

Rust 는 u8을 byte로 사용한다. 

C/C++과 다르게 rust에서는 문자열을 숫자형과 다르게 취급한다. 

즉, char는 u8도 아니고 i8도 아니다. 

 

usize, isize의 실제사이즈, 이것은 머신에 따라서 달라지며,  32bit머신에서는 32,

64비트 머신에서는 64로 동작한다, 이것은 C/C++ size_t, ptrdiff_t 와 유사하다. 

그리고, Rust의 array index는 usize를 이야기한다. 

vector size, array size를 나타내는 것도 usize이다. 

 

그리고 post fix로 type을 명시해줄수도 있다. 

 

34u8 이면 , 34이고 u8 type이라는 의미이고, 324isize면 isize의 324라는 의미이다. 

뒤에 명시적으로 붙어있지 않으면 rust는 타입추론으로 값을 예측한다. 

그리고 따로 명시적으로 적혀져 있지 않으면 기본적으로는 i32 type으로 판단을 한다. 

 

그리고 pre fix , 0x, 0o, 0b, 이런것들이 숫자 앞에 붙을 수 있는데, 이러한 것들은 

진법을 의미한다. 이것은 다른 언어들도 가지고 있는것이므로 pass

 

또하나는 _(언더바)  언더바는 숫자가 길거나 할때, 중간에 사이사이 넣어도 실제 영향을 끼치지는 않는다. 

이것은 , 예를 들면,  1000000 와 같이 백만을 나타낼때 1_000_000 이런식으로 하는게 읽기에는 좀 더 편할 수 있고

가독성을 위한 장치인것이다. 

 

 

반응형

'Rust' 카테고리의 다른 글

Rust, If 문 및 loop문, control flow (제어문)  (0) 2020.01.27
Rust, 튜플  (0) 2020.01.20
Rust , VSCode 환경 설정  (0) 2019.12.30
Rust, Global constant (전역 상수)  (0) 2019.12.19
Rust, 장점, 설치 Install  (0) 2019.12.10