Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

가변 길이 배열(VLA)이 C++ 표준에 포함되지 않는 이유와 대안

스택(stack)은 일반적으로 사용할 수 있는 공간이 매우 제한적이기 때문에, 잠재적으로 크기가 큰 배열을 스택에 생성해야 하는 상황은 바람직하지 않습니다. 배열의 크기를 미리 알고 있다면 정적(static) 배열을 사용하면 되지만, 크기를 미리 알 수 없다면 안전하지 않은 코드를 작성할 위험이 커집니다.

VLA가 C++ 표준에 없는 핵심 이유

가변 길이 배열(VLA, Variable-Length Array)이 C++에 기본 기능으로 포함되지 않는 결정적인 이유는 타입 시스템에 대한 대규모 변경이 필요하기 때문입니다. 참고로 C 언어는 C99 표준에서 VLA를 도입했지만, C++ 표준화 위원회는 타입 시스템의 복잡성 증가와 안정성 문제를 이유로 이를 채택하지 않았습니다.

C++의 대안: std::vector

C++에서는 STL(표준 템플릿 라이브러리)이 제공하는 std::vector가 가변 길이 배열의 훌륭한 대안입니다. vector는 힙(heap) 메모리를 사용해 실행 중에 크기를 동적으로 늘리거나 줄일 수 있으며, 메모리를 자동으로 관리해 주기 때문에 훨씬 안전하고 유연합니다. 다음과 같이 사용할 수 있습니다 −

예제

#include<iostream>
#include<vector>
using namespace std;

int main() {
    vector<int> vec;
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);
    vec.push_back(4);
    vec.push_back(5);
    // ...

    // 반복자(iterator)를 사용한 순회:
    for(vector<int>::iterator it = vec.begin(); it != vec.end(); it++) {
        cout << *it << endl;
    }
    return 0;
}

출력 결과

위 코드를 실행하면 다음과 같은 출력을 얻을 수 있습니다 −

1
2
3
4
5

참고로 C++11 이상에서는 범위 기반 for문(range-based for loop)을 사용하면 더욱 간결하게 순회할 수 있습니다. 예를 들어 for(int x : vec) cout << x << endl;처럼 작성하면 됩니다. 이처럼 std::vector는 VLA 없이도 동적 크기의 배열이 필요한 대부분의 상황을 안전하고 효율적으로 해결해 줍니다.