C++ 프로그래밍에서 데이터를 저장할 때 가장 많이 고민되는 선택지가 바로 배열(Array)과 벡터(Vector)입니다. 두 자료구조는 비슷한 용도로 사용되지만, 그 성격과 활용 방식은 확연히 다릅니다.
벡터는 템플릿 클래스로 만들어진 C++ 전용 구조체인 반면, 배열은 언어에 내장된(built-in) 기능으로 C와 C++ 모두에서 사용할 수 있습니다. 또한 벡터는 리스트 인터페이스를 갖춘 동적 배열로 구현되어 있으며, 배열은 원시 데이터 타입 기반으로 정적 또는 동적으로 구현됩니다.
벡터와 배열의 주요 차이점
벡터는 크기를 유연하게 늘릴 수 있는 동적 배열이지만, 일반 배열은 한 번 선언하면 크기를 변경할 수 없습니다.
벡터는
reserve()함수로 미리 메모리 공간을 예약할 수 있지만, 배열에는 예약 공간 개념이 없습니다.벡터는 하나의 클래스(class)이며, 배열은 기본 자료형(datatype)입니다.
벡터는 다양한 타입의 객체를 저장할 수 있지만, 배열은 동일한 타입(homogeneous)의 값만 저장할 수 있습니다.
배열의 장점
요소에 대한 빠르고 효율적인 임의 접근(random access)이 가능합니다.
구조가 단순하여 정렬 작업이 쉽습니다.
저장할 요소의 개수가 고정되어 있는 경우에 적합합니다.
배열의 단점
한 번 생성된 요소를 삭제할 수 없습니다.
실행 중에 크기가 변하는 동적 배열 생성이 어렵습니다.
서로 다른 여러 데이터 타입을 함께 저장할 수 없습니다.
벡터의 장점
크기가 자동으로 조절되므로 요소 추가 시 별도 처리가 필요 없습니다.
다양한 타입의 객체를 저장할 수 있습니다.
erase(),pop_back()등의 함수로 요소를 손쉽게 삭제할 수 있습니다.
예를 들어 벡터는 아래처럼 직관적으로 사용할 수 있습니다.
#include <vector>
std::vector<int> v = {1, 2, 3};
v.push_back(4); // 크기가 자동으로 증가
v.pop_back(); // 마지막 요소 삭제
벡터의 단점
벡터는 객체이기 때문에 순수 배열에 비해 메모리 소비량이 더 많습니다.
내부적으로 재할당이 발생할 수 있어, 극도로 성능이 중요한 환경에서는 오버헤드가 될 수 있습니다.
정리
데이터 개수가 고정되어 있고 최대 성능이 필요하다면 배열이 적합하지만, 대부분의 상황에서는 크기 조절, 삽입·삭제 기능, 편리한 멤버 함수들을 제공하는 벡터가 더 안전하고 생산적인 선택입니다. 특히 메모리 관리 실수로부터 자유롭다는 점에서 현대 C++ 개발에서는 벡터 사용이 권장됩니다.