# 튜플과 배열

튜플은 서로 다른 타입의 값을 함께 묶어 하나의 복합 자료형으로 표현할 수 있게 해준다. 정수와 실수, 문자열 등 다양한 타입을 함께 담되 고정된 개수만큼만 보관한다. 튜플을 정의하려면 소괄호로 묶고 각 요소를 쉼표로 구분한다. 예를 들어 (i32, f64, char)와 같은 모양으로 여러 타입을 묶어 선언할 수 있다.

튜플의 값을 꺼내는 기본적인 방법 중 하나는 인덱스를 사용하는 것이다. 인덱스는 0부터 시작해서 1씩 증가하는 정수이며, 각 요소에 접근하려면 점(.) 뒤에 인덱스를 붙여서 사용한다. 예를 들어 (500, 6.4, 1)이라는 튜플이 있다면 첫 번째 요소는 .0, 두 번째 요소는 .1, 세 번째 요소는 .2로 접근한다. 더 나은 방법으로, 튜플의 각 요소를 변수로 분해(destructuring)할 수도 있다. 이를 통해 각각의 요소를 편리하게 별도 변수로 다룰 수 있다.

아래는 튜플의 정의 및 분해 예시이다.

```rust
fn main() {
    let info = ("Alice", 30, true);
    let name = info.0;
    let age = info.1;
    let is_active = info.2;

    println!("이름: {}, 나이: {}, 활성화 여부: {}", name, age, is_active);

    let (my_name, my_age, my_status) = info;
    println!("이름: {}, 나이: {}, 활성화 여부: {}", my_name, my_age, my_status);
}
```

이 코드를 통해 볼 수 있듯이 튜플 내 요소는 인덱스를 통해 직접 꺼낼 수 있고, 분해를 통해 각각의 변수로 분리할 수도 있다. 튜플은 고정된 길이를 가지므로, 한 번 정의하면 요소의 개수나 타입을 변경할 수 없다.

배열은 동일한 타입의 값을 고정된 길이만큼 연속적으로 저장하는 자료형이다. 일반적으로 대규모의 정적 자료를 다룰 때 사용하며, 벡터(Vector)와 달리 크기가 컴파일 시점에 결정된다는 특징을 갖는다. 배열은 대괄호 안에 요소를 쉼표로 구분하여 선언하고, 전체 길이와 타입을 지정하는 방식을 사용할 수도 있다. 예를 들어 `let a: [i32; 5] = [1, 2, 3, 4, 5];` 형태로 선언하면 길이가 5인 정수형 배열이 만들어진다.

배열의 각 요소에 접근할 때는 인덱스를 사용하는데, 인덱스는 0부터 시작한다. 예를 들어 a\[0]은 첫 번째 요소에, a\[4]는 다섯 번째 요소에 대응한다. 인덱스를 초과하여 접근하면 런타임에서 에러가 발생하므로 항상 올바른 범위 내에서만 사용해야 한다. 배열은 스택에 고정된 크기로 할당되므로, 크기가 매우 큰 데이터를 담아야 하는 경우에는 벡터 같은 동적 자료 구조를 사용하는 것이 좋다.

아래는 배열의 정의와 접근 예시이다.

```rust
fn main() {
    let numbers = [10, 20, 30, 40, 50];
    let first = numbers[0];
    let last = numbers[4];

    println!("첫 번째 요소: {}", first);
    println!("마지막 요소: {}", last);

    let repeated = [3; 5];
    println!("반복된 요소 배열: {:?}", repeated);
}
```

이 예시에서 `let repeated = [3; 5];` 문장은 3이 다섯 개 들어있는 배열을 만들며, 이는 모든 요소가 같은 값일 때 사용하기 유용하다. 배열은 뒤에서 설명할 슬라이스(slices)를 만들 수 있는 기반 구조이기도 하다. 슬라이스를 사용하면 배열의 일부분만을 참조하여 사용 가능하므로, 배열 전체를 복사할 필요 없이 효율적으로 접근할 수 있다.

튜플은 다양한 타입을 혼합해 고정된 개수를 하나의 묶음으로 표현하고, 배열은 같은 타입의 정해진 개수만큼의 연속된 데이터를 표현한다. 둘 모두 그 길이가 컴파일 시점에 확정된다는 점에서 코드 안정성에 기여하지만, 요소의 수와 타입 변환이 자유롭지 않으니, 문제의 성격에 따라 적절히 골라 사용해야 한다.
