가변 배열(Jagged Array)은 '배열의 배열'을 의미합니다. 일반적인 2차원 배열과 달리 각 행(내부 배열)의 길이가 서로 다를 수 있어, 크기가 들쭉날쭉한 데이터 구조를 표현할 때 유용하게 사용됩니다.
C#에서 int 타입의 가변 배열 scores는 다음과 같이 선언할 수 있습니다.
int[][] scores;
가변 배열의 특징
- 각 내부 배열은 독립적으로 초기화되며, 길이가 달라도 됩니다.
- 선언 시 외부 배열만 먼저 생성하고, 나중에 각 내부 배열을 따로 할당할 수도 있습니다.
- 메모리를 더 유연하게 사용할 수 있어, 행마다 데이터 크기가 다른 경우에 적합합니다.
예제
다음 예제는 정수형 요소 2개씩을 가진 5개의 배열로 구성된 가변 배열을 선언하고, 중첩 반복문을 사용해 모든 요소의 값을 출력하는 코드입니다.
using System;
namespace ArrayApplication {
class MyArray {
static void Main(string[] args) {
/* 정수 배열 5개로 구성된 가변 배열 */
int[][] a = new int[][]{
new int[]{0,0},
new int[]{1,2},
new int[]{2,4},
new int[]{3,6},
new int[]{4,8}
};
int i, j;
/* 각 배열 요소의 값 출력 */
for (i = 0; i < 5; i++) {
for (j = 0; j < 2; j++) {
Console.WriteLine("a[{0}][{1}] = {2}", i, j, a[i][j]);
}
}
Console.ReadKey();
}
}
}실행 결과
a[0][0] = 0 a[0][1] = 0 a[1][0] = 1 a[1][1] = 2 a[2][0] = 2 a[2][1] = 4 a[3][0] = 3 a[3][1] = 6 a[4][0] = 4 a[4][1] = 8
위 코드에서 볼 수 있듯이, 가변 배열은 a[i][j] 형태로 두 개의 인덱스를 사용해 각 요소에 접근합니다. 외부 인덱스 i는 어떤 내부 배열을 참조할지 결정하고, 내부 인덱스 j는 해당 배열 안의 실제 요소 위치를 가리킵니다.