ReDim 문(Visual Basic)

배열 변수의 저장 공간을 다시 할당합니다.

ReDim [ Preserve ] name(boundlist) [ , name(boundlist) [, ... ] ]

구성 요소

용어

내용

Preserve

선택적 요소로서, 마지막 차원의 크기만 변경하는 경우 기존 배열의 데이터를 보존하는 데 사용하는 한정자입니다.

name

필수적 요소로서, 배열 변수의 이름입니다. 선언된 요소 이름(Visual Basic)를 참조하십시오.

boundlist

필수적 요소로서, 다시 정의된 배열의 각 차원에 대한 범위 목록입니다.

설명

ReDim 문을 사용하여 이미 선언된 하나 이상의 배열 차원의 크기를 변경할 수 있습니다. 큰 배열이 있는데 이 배열의 일부 요소가 더 이상 필요 없는 경우 ReDim 문으로 배열 크기를 줄여서 메모리를 확보할 수 있습니다. 반면 사용자 코드에서 배열에 더 많은 요소가 필요하다고 결정하는 경우 ReDim 문으로 필요한 요소를 추가할 수 있습니다.

ReDim 문은 배열에만 사용할 수 있으며 스칼라(단일 값만 포함하는 변수), 컬렉션 또는 구조체에는 사용할 수 없습니다. 변수를 Array 형식으로 선언하면 ReDim 문이 형식 정보가 부족하여 새 배열을 만들 수 없습니다.

ReDim 키워드는 프로시저 수준에서만 사용할 수 있습니다. 즉, 변수의 선언 컨텍스트는 프로시저여야 하며 소스 파일, 네임스페이스, 인터페이스, 클래스, 구조체, 모듈 또는 블록일 수 없습니다. 자세한 내용은 선언 컨텍스트 및 기본 액세스 수준(Visual Basic)을 참조하십시오.

규칙

  • 한정자. Preserve 한정자만 지정할 수 있으며, 이를 지정한 경우 ReDim 키워드를 생략할 수 없습니다.

  • 여러 변수. 각 배열 변수에 대해 name 및 boundlist 구성 요소를 지정하여 동일한 선언문에서 여러 배열 변수의 크기를 조정할 수 있습니다. 변수가 여러 개 있으면 쉼표로 구분됩니다.

  • 배열 범위. boundlist의 각 항목은 해당 차원의 하한 및 상한을 지정할 수 있습니다. 하한은 지정 여부에 관계없이 항상 0입니다. 상한은 차원의 길이(상한 + 1)가 아니라 해당 첨자의 최대값입니다. 각 첨자의 범위는 0부터 해당 첨자의 상한값까지입니다.

    boundlist의 차원 수는 배열의 원래 차수와 일치해야 합니다.

  • 빈 배열. 배열 차원의 상한을 선언하는 데는 -1을 사용할 수 있습니다. 즉, 배열이 비어 있지만 Nothing(Visual Basic)은 아니라는 뜻입니다. 자세한 내용은 Visual Basic의 배열을 참조하십시오. 그러나 Visual Basic 코드는 이러한 배열에 성공적으로 액세스할 수 없습니다. 액세스를 시도하면 실행 중 IndexOutOfRangeException 오류가 발생합니다.

  • 데이터 형식. ReDim 문은 배열 변수 또는 요소의 데이터 형식을 변경할 수 없습니다.

  • 초기화. ReDim 문은 배열 요소에 대한 새 초기화 값을 제공할 수 없습니다.

  • 차수. ReDim 문은 배열의 차수(차원 수)는 변경할 수 없습니다.

  • Preserve를 사용하여 크기 조정. Preserve를 사용하는 경우 마지막 배열 차원의 크기만 조정할 수 있으며, 다른 모든 차원의 경우에는 이미 기존 배열에서 가지고 있던 범위와 같은 범위를 지정해야 합니다.

    예를 들어, 배열에 차원이 하나만 있는 경우 마지막 차원이면서 유일한 차원을 변경하는 것이기 때문에 차원의 크기를 변경하더라도 배열의 내용을 유지할 수 있습니다. 그러나 배열에 차원이 두 개 이상이고 Preserve를 사용하는 경우에는 마지막 차원의 크기만 변경할 수 있습니다.

  • 속성. 값의 배열을 포함하는 속성에 ReDim을 사용할 수 있습니다.

동작

  • 배열 대체. ReDim은 기존 배열을 해제하고 같은 차수의 새 배열을 만듭니다. 배열 변수에서 해제된 배열이 새 배열로 대체됩니다.

  • Preserve를 사용하지 않고 초기화. Preserve를 지정하지 않으면 ReDim은 새 배열 요소를 해당 데이터 형식의 기본값으로 초기화합니다.

  • Preserve를 사용하여 초기화. Preserve 한정자를 지정하면 Visual Basic에서는 기존 배열의 요소가 새 배열로 복사됩니다.

예제

다음 예제에서는 동적 배열의 마지막 차원의 크기를 늘린 다음(배열의 기존 데이터 유지) 다시 크기를 줄입니다(부분적인 데이터 손실). 마지막으로 크기를 원래 값으로 다시 줄인 다음 모든 배열 요소를 다시 초기화합니다.

Dim intArray(10, 10, 10) As Integer
ReDim Preserve intArray(10, 10, 20)
ReDim Preserve intArray(10, 10, 15)
ReDim intArray(10, 10, 10)

첫째 ReDim은 변수 intArray의 기존 배열을 대신하는 새 배열을 만듭니다. ReDim은 기존 배열의 모든 요소를 새 배열로 복사합니다. 또한 모든 계층에서 각 행 끝에 10개의 열을 추가하고 추가된 열의 요소를 0(배열 요소 형식인 Integer의 기본값)으로 초기화합니다.

둘째 ReDim 문은 다른 새 배열을 만들고 적절한 요소를 모두 복사합니다. 그러나 모든 계층에 있는 전체 행의 끝에서 5개의 열이 손실됩니다. 이 열을 더 이상 사용하지 않는 경우에는 해당 열이 손실되어도 문제가 되지 않습니다. 큰 배열의 크기를 줄이면 필요 없는 메모리를 확보할 수 있습니다.

셋째 ReDim은 다른 새 배열을 만들고 모든 계층의 각 행 끝에서 5개의 열을 추가로 제거합니다. 이때 기존 요소는 복사되지 않으며 배열을 원래 크기로 되돌리고 모든 요소를 원래의 기본값으로 되돌립니다.

참고 항목

참조

Const 문(Visual Basic)

Dim 문(Visual Basic)

Erase 문(Visual Basic)

Nothing(Visual Basic)

IndexOutOfRangeException

개념

Visual Basic의 배열