벌써 54번째 단계까지 오셨다니 정말 대단하세요. 지금까지 차근차근 잘 따라오셨으니, 오늘 배울 내용도 식은 죽 먹기일 거예요.
오늘은 **'튜플 구조체(Tuple Struct)'**라는 친구를 만나볼 거예요. 이름이 조금 어렵게 느껴질 수도 있지만, 알고 보면 아주 단순하고 편리한 도구랍니다.
---
여러분, **'색연필 세트'**를 떠올려 보세요.
일반적인 **구조체(데이터를 묶는 방법)**가 "빨강: 255, 초록: 0, 파랑: 0"처럼 칸마다 이름을 붙여놓은 서랍장이라면, **튜플 구조체**는 그냥 이름표만 붙어 있는 **'색깔 상자'**와 같아요.
상자 안에는 "255, 0, 0"이라는 숫자만 순서대로 들어 있죠. 우리는 이 상자가 '색깔'을 담는 상자라는 걸 이미 알고 있기 때문에, 굳이 칸마다 "이건 빨강이야"라고 이름을 붙이지 않아도 되는 거예요.
즉, **"전체 이름은 필요하지만, 속 안의 내용물에 일일이 이름을 붙이기는 귀찮을 때"** 사용하는 아주 효율적인 도구랍니다!
---
튜플 구조체를 만드는 법은 아주 간단해요. 아래처럼 써주면 됩니다.
struct Color(i32, i32, i32); // 'Color'라는 이름의 튜플 구조체(데이터 묶음)를 선언해요.
struct Point(i32, i32, i32); // 'Point'라는 이름의 또 다른 구조체를 만들어요.
* **구조체(Struct):** 관련된 데이터들을 하나로 묶어주는 틀이에요.
* **필드(Field):** 구조체 안에 들어가는 각각의 데이터 조각들이에요.
여기서는 `i32`(정수 형태의 숫자)들이 필드예요.
---
### 3. 직접 코드로 써보기
가장 핵심적인 부분만 쏙 뽑아낸 예제를 함께 볼까요?
struct Color(i32, i32, i32); // 1. 정수 3개를 담는 'Color'라는 틀을 만들어요.
fn main() {
let black = Color(0, 0, 0); // 2. 실제 데이터(검정색)를 담은 'black' 객체(실체)를 생성해요.
println!("첫 번째 값: {}", black.0); // 3. 인덱스(순서 번호)를 사용해 0번째 값을 가져와요.
println!("두 번째 값: {}", black.1); // 4. 점(.) 뒤에 숫자를 붙여서 순서대로 꺼낼 수 있어요.
}
*알아두면 좋은 점:**
- 데이터를 꺼낼 때는 이름 대신 **0, 1, 2... 같은 숫자(인덱스)**를 사용해요.
- `Color`와 `Point`는 구성이 같아도 러스트는 **서로 다른 종류**로 인식해요. 덕분에 실수로 색상 값에 좌표 값을 넣는 사고를 막아준답니다! (이것을 '타입 안전성'이라고 해요.)
---
- "이 데이터 묶음이 무엇인지" 이름은 붙이고 싶지만,
- 내부의 데이터들이 너무 뻔해서(예: 좌표의 x, y, z 또는 색상의 R, G, B)
- 굳이 하나하나 이름을 붙이는 게 번거로울 때 사용하면 딱이에요!
---
여러분, 오늘 공부도 정말 고생 많으셨어요! 튜플 구조체는 복잡한 이름표 대신 **순서와 전체 이름**만으로 데이터를 깔끔하게 정리해주는 고마운 친구예요.
처음에는 `.` 뒤에 숫자를 붙이는 게 어색할 수 있지만, 몇 번만 연습해보면 금방 익숙해질 거예요.
| 56. 연관 함수와 생성자 (0) | 2026.10.06 |
|---|---|
| 55. 메서드 정의하기: impl 블록 (0) | 2026.10.06 |
| 53. 필드 초기화 축약법 (0) | 2026.10.01 |
| 52. 구조체 정의와 인스턴스 생성 (0) | 2026.10.01 |
| 51. 구조체란 무엇인가? (0) | 2026.10.01 |