본문 바로가기
Rust

Rust 변수,상수, 데이터 타입

by 올리고당 2021. 6. 14.

목차


immutable variable ( 불변 변수 )

먼저 다른 언어와의 차이점을 보겠습니다.

 

변수 Rust C Java Python
언어타입 정적 정적 정적 동적
선언식별자 let int, void int, void 없음
Default immutable(불변) mutable(가변) mutable(가변) mutable(가변)
상수식별자 const const final 없음

※ 정적 타입 언어 :  컴파일 시 변수 타입이 정해져야 함.

※ 동적 타입 언어 :  런타임 동안 변수 타입이 정해짐.

 

let 식별자로 변수를 선언하면, Rust 컴파일러가 데이터 타입 추론을 통해 변수 타입을 결정합니다.

mutable variable( 가변 변수 )를  선언하려면 mut 식별자를 같이 사용해야 합니다.

 

변수 선언 예시

 

immutable 변경 컴파일 에러

 


const vs immutable ( 상수 vs 불변 변수 )

1. 변수 재정의와 shadowing

사실, immutable variable은 변수를 재정의 함으로써 새로운 값을 할당받을 수 있습니다.

재정의 하는 과정에서 이전의 값이 다음 값에 의해 가려지는 것을 shadowing이라 합니다.

 

변수 재정의와 shadowing 예시 코드

 

2. const는 지역 내에서 같은 이름으로 한 번만 정의 가능. (재정의 불가)

 

3. const는 전역/지역 정의가 모두 가능. let은 지역만 가능.

 

4. const는 mut 식별자 사용 불가.

 

5. const는 타입 부연설명을 명시해야 함.

 

6. const는 함수의 반환 값 등 런타임 동안에 계산되는 값으로 정의할 수 없음.

 

const 예시 코드

 


Type annotation ( 타입 부연설명 )

일반적으로 Rust 컴파일러가 데이터 타입 추론을 통해 변수 타입을 결정하지만, 종종 명확히 판단을 내리지 못해 프로그래머가 직접 타입 부연설명을 해주어야 합니다.

 

타입 부연설명 에러 코드

 

타입 부연설명 에러

 

parse() 함수는 여러 가지 숫자 타입 반환 값을 가질 수 있으므로 타입 부연설명을 해주어야 합니다.

 

u32(unsigned int 32bit)로 타입 부연설명을 한 코드

 


Data Type ( 데이터 타입)

* Scalar Types

 

Integer Types ( 정수형 ) 

 

Length Signed Unsigned
8-bit i8 u8
16-bit i16 u16
32-bit i32(default) u32
64-bit i64 u64
128-bit i128 u128
arch isize usize

 

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

※  98_222는 98,222와 같은 의미

※  release mode 컴파일 시 integer overflow 확인불가.

 

 

Floating-point Types ( 실수형 ) : f32, f64(default)

 

Floating-point 타입 부연설명 예시 코드

 

나눗셈 연산 예제 코드

 

Boolean Type ( 참/거짓 ) : 1 Byte, bool

 

Boolean 타입 부연설명 예시 코드

 

Character Type ( 문자형 ) : 4 Byte, Unicode, 홑 따옴표 사용

 

Character 타입 예시 코드

 

Charater 타입 예시 코드 실행 출력화면

 

* Compound Types

 

Tuple Type  ( 튜플 ) : 고정된 길이

 

Tuple 타입 예시 코드

 

Arrray Type ( 배열 ) :  고정된 길이

 

Array 타입 예시 코드

 

런타임 도중 배열의 길이를 초과하는 입력을 받아 배열 원소에 접근한다면?

=> Rust 에서는 배열 원소에 접근할 때, 프로그래머가 접근한 인덱스와 실제 배열 길이를 비교하여 접근한 인덱스가 실제 배열의 길이보다 작은지 확인합니다. 배열 길이를 초과한다면, 에러 메시지와 함께 프로그램이 종료됩니다. (Rust's safty principles)

 


 

공식 도서

https://doc.rust-lang.org/book/

 

공식 도서 번역본

https://rinthel.github.io/rust-lang-book-ko/

 

Rust by Example

https://doc.rust-lang.org/stable/rust-by-example/index.html

 


오늘은 Rust 변수, 상수, 데이터 타입에 대해 정리해보았습니다.

저도 정리하면서 공부할 수 있는 좋은 시간이었습니다.

여러분께도 조금이나마 도움이 되었으면 좋겠습니다.

감사합니다.

 

* 피드백은 댓글로 남겨주세요 *