[Rust Guide] 8.2. 벡터와 Enum 응용

발행: (2026년 4월 12일 오전 07:06 GMT+9)
4 분 소요
원문: Dev.to

Source: Dev.to

Cover image for [Rust Guide] 8.2. Vector and Enum Applications

8.2.0. Chapter Overview

Chapter 8은 주로 Rust에서 흔히 사용되는 컬렉션에 대해 다룹니다. Rust는 다양한 컬렉션‑유사 데이터 구조를 제공하며, 이러한 컬렉션은 여러 값을 담을 수 있습니다. 하지만 Chapter 8에서 다루는 컬렉션은 배열과 튜플과는 다릅니다.

Chapter 8의 컬렉션은 스택이 아니라 힙에 저장됩니다. 이는 컴파일 타임에 크기를 알 필요가 없으며, 런타임에 동적으로 성장하거나 축소될 수 있음을 의미합니다.

이 장에서는 세 가지 컬렉션에 초점을 맞춥니다: Vector, String, 그리고 HashMap.

8.2.1. How Vector and Enum Complement Each Other

Vector는 동적으로 크기가 변할 수 있지만, 모든 요소는 여전히 같은 데이터 타입이어야 합니다. 힙에 서로 다른 타입의 데이터를 저장해야 할 때는 enum을 사용할 수 있습니다.

Enum 변형은 첨부 데이터를 가질 수 있으며, 그 데이터는 서로 다른 타입일 수 있습니다. 가장 중요한 점은 모든 변형이 동일한 enum 타입에 속한다는 것입니다. 즉, 모든 변형이 같은 타입이므로 Vector에 저장할 수 있습니다.

이를 통해 enum을 사용해 Vector 안에 서로 다른 데이터 타입을 저장할 수 있게 됩니다.

8.2.2. Vector + enum

Vector와 enum을 함께 사용하는 실용적인 예시:

enum SpreadSheetCell {
    Int(i32),
    Float(f64),
    Text(String),
}

fn main() {
    let row = vec![
        SpreadSheetCell::Int(5567),
        SpreadSheetCell::Text("up up".to_string()),
        SpreadSheetCell::Float(114.514),
    ];
}

이 예시는 Excel 셀의 동작을 시뮬레이션합니다. 셀은 다음 중 하나만 저장할 수 있습니다: 정수, 부동소수점 숫자, 혹은 문자열. 따라서 SpreadSheetCell enum을 Int, Float, Text 세 변형으로 정의했습니다.

main에서 변수 row는 한 행의 셀들을 담고 있습니다. 행에 들어가는 셀 수는 고정되어 있지 않으므로 Vector를 사용해 저장합니다. 벡터는 세 개의 셀로 초기화됩니다: 정수(5567), 문자열("up up"), 그리고 부동소수점 숫자(114.514).

데이터를 담을 수 있는 enum을 사용함으로써, 우리는 간접적으로 서로 다른 데이터 타입을 Vector에 저장할 수 있습니다.

Rust는 Vector의 요소 타입을 컴파일 타임에 알아야 힙 메모리를 얼마나 할당할지 결정하고, 모든 요소에 대해 일괄 연산이 유효한지 확인할 수 있습니다. enum과 match 표현식을 함께 사용하면 Rust가 모든 가능한 경우를 컴파일 타임에 알게 되어 런타임에 올바르게 처리할 수 있습니다.

가능한 데이터 타입 집합이 완전하다면 enum이 작동합니다. 무한히 많은 가능성이나 비완전한 집합의 경우에는 트레이트가 필요하며, 이는 이후 장에서 다룰 주제입니다.

0 조회
Back to Blog

관련 글

더 보기 »

[Rust Guide] 6.2. Option 열거형

Option Enum이란 무엇인가? Option은 표준 라이브러리에서 정의되고 프리루드(prelude)라는 사전 임포트된 모듈에 포함됩니다. 이는 값이 …​

Java 메서드 이해하기

Java 프로그램을 작성하면 곧 같은 코드를 반복해서 쓰게 되는 문제에 직면합니다. 메서드가 이를 해결합니다. 메서드를 …