C.W.K.
Stream
Lesson 02 of 05 · published

튜플 & 배열

~10 min · types, tuples, arrays

Level 0Rust 호기심러
0 XP0/80 lessons0/19 achievements
0/100 XP to next level100 XP to go0% complete

값을 묶는 내장 방법 두 개: 튜플 (혼합 타입, 고정 개수) 과 배열 (한 타입, 고정 개수). 둘 다 스택에 살고, 둘 다 컴파일 타임에 크기가 알려져 있어.

튜플

튜플은 다른 타입일 수 있는 값 고정 개수를 묶어: (i32, f64, char). let 패턴으로 구조분해하거나, .0, .1 로 위치로 필드에 닿아. 튜플은 일회성에 struct 를 만들지 않고 함수에서 여러 값을 반환할 때 빛나.

배열

배열은 한 타입의 고정 길이 줄이야: [i32; 4] 는 정확히 i32 네 개, 스택 할당, 길이가 타입에 구워져 있어. 인덱싱은 경계 검사돼 — 끝을 넘으면 엉뚱한 메모리를 읽는 대신 Rust 가 panic 해 (C 버퍼 오버런, 제거됨). 자라는 시퀀스는 Vec 을 원하고, Collections 트랙이 다뤄.

배열 vs Vec: 스택 vs 힙, 고정 vs 자람. 배열 [T; N] 은 컴파일 타임 길이를 갖고 스택에 살아. Vec 은 런타임에 자라고 힙에 살아. 크기가 진짜 고정이고 알려져 있으면 배열; 자라야 하는 순간 `Vec` 으로 손 뻗어.

구조분해는 사방에 있어

let 에서 튜플을 패턴 구조분해하는 게 언어 전체를 관통하는 Rust 패턴 매칭의 첫 맛이야. let (x, y) = point; 는 두 값을 한 번에 꺼내 — 이 같은 모양을 나중에 match, 함수 파라미터, if let 에서 보게 돼.

Code

튜플 구조분해와 경계 검사 배열·rust
fn main() {
    // 튜플: 혼합 타입, 위치로 접근하거나 구조분해
    let person = ("Ferris", 3, true);
    let (name, age, _active) = person; // 구조분해
    println!("{name} is {age}, field 2 = {}", person.2);

    // 배열: 한 타입, 고정 길이, 경계 검사
    let scores = [90, 85, 100, 70];
    println!("first = {}, len = {}", scores[0], scores.len());
    // scores[10];  // panic: 인덱스 범위 초과 (엉뚱한 읽기 없음)
}

External links

Exercise

&[i32] 를 받아 최솟값과 최댓값의 튜플 (i32, i32) 를 반환하는 함수를 써봐. 호출 지점에서 결과를 이름 붙은 변수 둘로 구조분해해. 그다음 일부러 배열 끝을 하나 넘겨 인덱싱하고 panic 을 봐 — 조용한 틀린 읽기가 아니라 깨끗한 panic 인 거 새겨봐.
Hint
(min, max) 반환하고 let (lo, hi) = ...; 로 구조분해하는 게 관용적 빠른 다중 값이야. 범위 초과 panic 은 Rust 가 유효하다고 증명 못 하는 메모리 읽기를 거부하는 거야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고
💛 by 똘이warm

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.