컴파운드는 영어로 결합을 의미합니다.
즉 정수 여러개가 들어있는 배열과도 같은 자료형들을 컴파운드 타입이라고 합니다.
러스트에서는 두가지가 있습니다.
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 |