본문 바로가기
카테고리 없음

Rust에서 벡터(Vector)와 컬렉션(Collection) 사용하기

by mystory55801 2025. 5. 30.

Rust에서 벡터(Vector)와 컬렉션(Collection) 사용하기

Rust에서 데이터를 동적으로 저장하고 관리하려면 벡터(Vector)와 다양한 컬렉션(Collection)을 활용하는 것이 중요합니다. 벡터는 가장 기본적이고 많이 쓰이는 동적 배열이며, 해시맵(HashMap)과 같은 컬렉션은 키-값 쌍을 관리할 때 매우 유용합니다. 이번 글에서는 Rust의 벡터와 주요 컬렉션 타입을 소개하고, 기본 사용법과 주의사항을 알려드립니다.

1. 벡터(Vec)란?

벡터는 크기가 동적으로 변하는 배열로, Vec 타입으로 선언합니다. Rust의 벡터는 메모리 안전성을 보장하며, 데이터 추가, 삭제, 접근 등이 효율적으로 처리됩니다.


fn main() {
    let mut numbers = Vec::new();
    numbers.push(10);
    numbers.push(20);
    numbers.push(30);

    println!("벡터의 값: {:?}", numbers);
}

2. 벡터 초기화 방법

벡터는 vec![] 매크로를 사용해 간편하게 초기화할 수 있습니다.


let fruits = vec!["사과", "바나나", "오렌지"];
println!("{:?}", fruits);

3. 벡터 값 접근과 수정

벡터 요소에 접근할 때는 인덱스 연산자 또는 get 메서드를 사용합니다. getOption 타입을 반환해 안전한 접근이 가능합니다.


let mut v = vec![1, 2, 3];

println!("첫 번째 요소: {}", v[0]);

match v.get(10) {
    Some(value) => println!("10번째 요소: {}", value),
    None => println!("10번째 요소가 없습니다."),
}

v[1] = 20;
println!("수정된 벡터: {:?}", v);

4. 주요 컬렉션 타입 소개

Rust 표준 라이브러리는 벡터 외에도 여러 컬렉션 타입을 제공합니다.

  • HashMap: 키와 값의 쌍으로 데이터를 저장하는 해시 맵. 빠른 조회에 적합.
  • HashSet: 중복 없는 값들의 집합.
  • LinkedList: 양방향 연결 리스트, 특정 상황에서 유용.
  • BTreeMap, BTreeSet: 정렬된 키-값 쌍 및 집합 구현체.

5. HashMap 사용 예제

키-값 쌍 데이터를 저장할 때는 HashMap을 활용합니다.


use std::collections::HashMap;

fn main() {
    let mut scores = HashMap::new();

    scores.insert(String::from("팀 A"), 50);
    scores.insert(String::from("팀 B"), 70);

    match scores.get("팀 A") {
        Some(score) => println!("팀 A 점수: {}", score),
        None => println!("팀 A 점수 없음"),
    }
}

6. 벡터와 컬렉션 활용 시 주의사항

벡터나 컬렉션을 사용할 때는 다음 사항에 주의해야 합니다.

  • 인덱스 범위를 벗어난 접근은 프로그램을 패닉 상태로 만들 수 있으니 get 메서드 활용을 권장합니다.
  • 컬렉션에 데이터를 삽입하거나 삭제할 때는 소유권과 빌림 규칙을 잘 이해해야 안전합니다.
  • 동시성 환경에서는 MutexRwLock 같은 동기화 도구를 사용하세요.

결론: Rust 벡터와 컬렉션으로 유연한 데이터 관리

Rust에서 벡터와 다양한 컬렉션 타입을 잘 활용하면, 효율적이고 안전한 데이터 구조를 구현할 수 있습니다. 특히 벡터는 동적 배열 구현의 기본이며, HashMap 등 컬렉션은 복잡한 데이터 관계 표현에 필수적입니다. 기본 문법과 사용법을 숙지하고, 다양한 예제를 통해 경험을 쌓아보세요.