다차원 배열과 조각 배열(jagged arrays)은 Visual Basic에서 컬렉션을 다루기 위한 두 가지 상이한 구조입니다. 처음에 VB(VB6, .NET)는 직사각형(2차원, 3차원) 배열만 지원했습니다. 이후 .NET에서 조각 배열을 개별 객체로 지원하게 되었습니다.
전통적인 다차원 배열(예: Dim matrix(2,3) As Integer)은 데이터 테이블이 반드시 직사각형일 때 유용합니다. 조각 배열(jagged)은 VB.NET에서 내부 배열의 요소 수가 다를 수 있는 불규칙한 행을 생성하는 기능과 함께 도입되었습니다.
잘못된 접근 방식 선택은 메모리의 비효율적인 사용(예: 직사각형 배열은 모든 행이 고정되어 있음) 또는 요소 접근의 잘못된 논리로 이어질 수 있습니다(범위를 벗어난 접근 오류 발생). 종종 구문 및 초기화 방법이 혼동됩니다.
직사각형(multidimensional) 배열은 내용이 항상 가득 찰 때 선택합니다(예: 게임 필드). 조각 배열은 행의 길이가 다를 때 선택합니다(예: 다른 반의 학생 목록). 두 경우의 요소 접근 방식은 다릅니다.
코드 예시:
' 다차원 배열 Dim rect(1, 2) As Integer ' 2행, 3열(0부터 인덱스 시작) rect(0,0) = 1 : rect(0,1) = 2 : rect(0,2) = 3 rect(1,0) = 4 : rect(1,1) = 5 : rect(1,2) = 6 ' 조각 배열 Dim jagged(2)() As Integer ' 3개의 요소로 구성된 배열, 각 요소가 배열 jagged(0) = New Integer() {1, 2} jagged(1) = New Integer() {3, 4, 5} jagged(2) = New Integer() {6} Console.WriteLine(rect(1,2)) ' 6 Console.WriteLine(jagged(1)(2)) ' 5
주요 특징:
Dim a(2,3) As Integer로 조각 배열을 설정할 수 있습니까?
답변: 아니요, 이는 직사각형 배열을 생성합니다. 조각 배열은 이렇게 설정합니다: Dim a(2)() As Integer 또는 Dim a As Integer()().
조각 구조의 내부 배열을 초기화하지 않고 요소에 접근하려고 하면 어떻게 됩니까?
답변: 내부 배열이 생성되지 않아 NullReferenceException 예외가 발생합니다.
일차원 배열과 조각 배열의 차원 길이 구문이 어떻게 다릅니까?
답변: 직사각형 배열의 경우: a.GetLength(0) (행 수), a.GetLength(1) (열 수). 조각 배열의 경우: a.Length (행 수), a(i).Length (i행의 요소 수).
학급별 학생 목록 저장을 위해 직사각형 배열(10, 30)이 선택되었습니다. 빈 요소는 사용되지 않으며 일부 학급은 최대 학생 수보다 적습니다.
장점:
단점:
조각 배열이 사용됩니다: 각 내부 배열은 특정 학급의 실제 학생 목록으로, 메모리 최적화 및 처리의 용이성이 있습니다.
장점:
단점: