Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

인덱싱(Indexing)

지금까지의 TicketStore::get 메소드는 주어진 TicketId에 대해 Option<&Ticket>을 반환해 주었습니다. 그런데 이미 여러분은 Rust에서 배열이나 벡터의 요소에 접근할 때 흔히 쓰이는 인덱싱(Indexing) 구문을 익히 알고 계실 거예요.

let v = vec![0, 1, 2];
assert_eq!(v[0], 0);

이와 동일한 사용 경험을 TicketStore에서도 제공할 순 없을까요? 맞습니다! 바로 Index 트레이트를 구현하면 가능합니다.

Index 트레이트

Index 트레이트는 Rust 표준 라이브러리에 다음과 같이 정의되어 있습니다.

// 약간 단순화된 정의입니다.
pub trait Index<Idx>
{
    type Output;

    // 필수 메소드
    fn index(&self, index: Idx) -> &Self::Output;
}

이 트레이트에는 두 가지 핵심 요소가 있습니다.

  • Idx: 인덱스로 사용할 타입을 나타내는 제네릭(Generic) 매개변수입니다.
  • Output: 인덱스를 통해 찾은 값의 타입을 나타내는 연관 타입(Associated type)입니다.

여기서 주의할 점은 index 메소드가 Option을 반환하지 않는다는 것입니다. 이는 배열이나 벡터 인덱싱과 마찬가지로, 존재하지 않는 인덱스에 접근하려고 하면 index 메소드가 **패닉(Panic)**을 일으킨다는 것을 전제로 하기 때문입니다. 이 점을 꼭 기억해 두세요!

Exercise

The exercise for this section is located in 06_ticket_management/13_index