크기 조정(Resizing)
Vec이 “확장 가능한” 타입이라고 말씀드렸는데, 실제로 어떻게 늘어나는 것일까요? 만약 최대 용량(Capacity)에 도달한 Vec에 요소를 추가로 넣으려 하면 어떻게 될까요?
let mut numbers = Vec::with_capacity(3);
numbers.push(1);
numbers.push(2);
numbers.push(3); // 용량이 꽉 찼습니다!
numbers.push(4); // 이때 무슨 일이 일어날까요?
이런 경우 Vec은 **자체적으로 크기를 조정(Resizing)**합니다. 더 구체적으로는 메모리 할당자(Allocator)에게 더 큰 새로운 힙 메모리 공간을 요청한 뒤, 기존 요소들을 새 공간으로 모두 복사하고, 이전에 사용하던 메모리는 해제합니다. 이 과정을 **재할당(Reallocation)**이라고 부릅니다.
이 작업은 새로운 메모리 할당과 데이터 복사를 동반하므로, 요소가 많을수록 비용이 꽤 발생할 수 있습니다.
Vec::with_capacity
만약 벡터에 담을 요소의 대략적인 개수를 미리 알고 있다면, Vec::with_capacity 메서드를 사용하는 것이 좋습니다. 처음부터 충분한 메모리를 미리 확보해 두면, 벡터가 커질 때 발생하는 불필요한 재할당을 피할 수 있습니다.
다만, 너무 많은 공간을 미리 잡아두면 메모리가 낭비될 수 있으니 상황에 맞춰 적절히 선택하는 것이 중요합니다.
Exercise
The exercise for this section is located in 06_ticket_management/03_resizing