본문 바로가기

Rust

[Rust]3. 컴파운드 타입

컴파운드는 영어로 결합을 의미합니다.

즉 정수 여러개가 들어있는 배열과도 같은 자료형들을 컴파운드 타입이라고 합니다.

러스트에서는 두가지가 있습니다.


1.배열

러스트의 배열은 C/C++에서의 배열과 유사합니다.

let a: =[1,2,3,4];

a[0]; // 값은 1

배열의 길이를 변경할 수 없고, 원소도 모두 하나의 자료형으로만 구성 될 수 있습니다.

(만약 길이가 변하는 동적 배열이 필요하다면, 표준 라이브러리에 있는 Vector를 사용하시면 됩니다.)

각 원소를 참조하기 위해, 대괄호[]를 쓴다는것 또한 동일합니다.


선언 방법은 다음과 같습니다.

let a=[1,2,3,4];

자료형 표현은

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

다음과 같이, [자료형; 배열의 길이]로 표현해주면 됩니다.



2.튜플

STL을 다뤄보셨으면 익숙할 자료형입니다.


배열과의 차이는, 튜플에서는 각 원소의 자료형이 일치하지 않을수 있다는 점이 다릅니다.

let a:(i32,f64,u8)= (500,6.4,1);


아마 상당히 직관적이라서 큰 설명 없이도 이해 하실것 같습니다.

타입은 (자료형,자료형,자료형)로 표기하고, (값,값,값)의 형태로 대입하면 됩니다.

꼭 원소가 세개일 필요는 없습니다. 몇개든 상관이 없어요.


n번째 원소를 찾을때, 배열에서 a[인덱스]를 했던것과는 조금 다릅니다.

튜플은 인덱스가 아니라 점(.)으로 표기해줍니다. 즉

let a=(500,20);

let b=a.0; //500

let c=a.1; //20

이렇게 튜플의 특정 원소를 참조할 수 있습니다.


러스트는 이 튜플을 다루기 위해 좀더 편리한 문법을 넣어놨어요.

다음과 같은 코드입니다.

let tup=(1,2,3);

let (x,y,z)=tup;

이런식으로 코딩할수 있습니다.

위 코드는 결과적으로, x=1, y=2, z=3를 수행합니다.

즉 튜플에 각 원소를 대응시켜, 값을 대입하는 방식입니다.

이를 디스트럭팅(destructing)이라고 합니다.


3.튜플 vs 배열

두가지의 차이를 정리해봅시다.

-배열은 모든 원소가 하나의 자료형으로만 구성되어야하지만, 튜플은 그렇지 않다.

-튜플은 디스트럭팅이 가능하지만, 배열은 그렇지 않다.

-특정 인덱스의 원소를 튜플은 점으로, 배열은 대괄호로 참조한다.


4.범위 밖 인덱스 참조?

길이가 4인 배열인데, 10번째 원소를 참조한다 칩시다.

let a = [1,2,3,4];

a[10] // ?

이 경우 런타임 에러가 납니다.

C/C++에서는 에러를 띄우지 않고 그냥 뻗어버리니, 러스트의 소소한 장점이라고 할수 있겠습니다.

'Rust' 카테고리의 다른 글

[Rust]5. 흐름 제어 (조건문과 반복문)  (0) 2018.11.08
[Rust]4. 함수  (0) 2018.11.07
[Rust]2. 스칼라 타입  (0) 2018.11.06
[Rust]1. 변수와 상수  (1) 2018.11.05
[Rust]0. 시작하기, 출력  (0) 2018.11.05