hyunsu blog

홈강좌Rust 입문·중급 47편 중 8편째

Rust 튜플 — 타입이 다른 값 몇 개를 하나로 묶는다

목차 · 4
  1. 01괄호로 묶고 번호로 꺼낸다
  2. 02없는 번호를 쓰면 E0609
  3. 03실습 — 내 도시 날씨로 바꿔 보기
  4. 04자주 묻는 질문

Rust 튜플은 타입이 다른 값 몇 개를 괄호로 묶은 값 하나다. .0·.1 처럼 번호로 꺼내고, let (a, b) = … 로 한 번에 나눠 담는다. 없는 번호를 쓰면 E0609 로 컴파일이 멈춘다.

01 괄호로 묶고 번호로 꺼낸다

서울의 날씨를 도시 이름(문자열)·기온(실수)·습도(정수) 셋으로 묶어 보자.

rust
fn main() {
    let seoul = ("Seoul", 23.5, 60);

    println!("{}", seoul.0);
    println!("{}", seoul.1);
    println!("{}", seoul.2);

    let (city, temp, humidity) = seoul;
    println!("{city}: {temp} C, {humidity}%");
}
text
   Compiling weather v0.1.0 (~/projects/weather)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.17s
     Running `target/debug/weather`
Seoul
23.5
60
Seoul: 23.5 C, 60%
  • ("Seoul", 23.5, 60) 처럼 괄호 안에 쉼표로 늘어놓으면 튜플이다. 값마다 타입이 달라도 된다.
  • 꺼낼 때는 seoul.0 처럼 점 뒤에 번호를 쓴다. 번호는 1 이 아니라 0 부터 센다.
  • let (city, temp, humidity) = seoul; 은 튜플을 풀어서 변수 셋에 차례로 담는다. 번호보다 이름이 읽기 쉬우니, 여러 번 쓸 값이면 이렇게 풀어 둔다.

튜플의 길이는 정해지면 바뀌지 않는다. 값을 더하거나 뺄 수 없다.

02 없는 번호를 쓰면 E0609

값이 셋인데 네 번째(.3)를 꺼내면 어떻게 될까.

rust
fn main() {
    let seoul = ("Seoul", 23.5, 60);
    println!("{}", seoul.3);
}
text
   Compiling weather v0.1.0 (~/projects/weather)
error[E0609]: no field `3` on type `(&str, {float}, {integer})`
 --> src/main.rs:3:26
  |
3 |     println!("{}", seoul.3);
  |                          ^ unknown field
  |
  = note: available fields are: `0`, `1`, `2`

For more information about this error, try `rustc --explain E0609`.
error: could not compile `weather` (bin "weather") due to 1 previous error
  1. 무엇 — (&str, {float}, {integer}) 타입에는 3 이라는 칸(field)이 없다. 이 타입 이름이 곧 "문자열·실수·정수 세 칸짜리 튜플" 이라는 뜻이다.
  2. 어디 — 3번째 줄 seoul.3 의 3.
  3. 고치는 법 — note: 가 쓸 수 있는 번호를 알려 준다. 0, 1, 2 뿐이다.

튜플의 칸 수는 타입에 들어 있어서, 없는 칸은 실행하기 전에 컴파일러가 잡는다.

03 실습 — 내 도시 날씨로 바꿔 보기

tuple-basic 의 값을 사는 도시로 바꿔 돌려 보자. 그다음 튜플에 값을 하나 더 넣어(예: 풍속 3.2) 네 칸짜리로 만들고, let 으로 풀 때도 변수를 하나 더 둔다. 변수 수가 칸 수와 다르면 어떤 오류가 나는지도 확인해 보자. 2편의 세 군데로 읽으면 된다.

튜플은 함수가 값을 둘 이상 돌려줄 때 자주 쓴다(11편). 다음 편은 같은 타입의 값을 여러 개 담는 배열이다.

04 자주 묻는 질문

값이 하나뿐인 튜플도 있나?

있다. (5,) 처럼 쉼표를 꼭 붙인다. 쉼표가 없으면 (5) 는 그냥 괄호로 감싼 숫자 5 다. 값이 하나도 없는 () 도 있는데, 11편에서 "값 없음" 으로 다시 만난다.