위와 같은 2차원 배열을 생성하기 위해서는 아래 코드 중 하나를 사용할 수 있습니다
방법1) int[,] array1 = new int[2, 3];
array1[0,0] = 1; array1[0,1] = 2; array1[0,2] = 3;
array1[1,0] = 4; array1[1,1] = 5; array1[1,2] = 6;
방법2) int[,] array2 = new int[,] { { 1, 2, 3 }, { 4, 5, 6 } };
방법3) int[,] array3 = { { 1, 2, 3 }, { 4, 5, 6 } };
3차원 이상의 배열은 사용하지 않기를 권장하지만 필요한 경우가 있을 수도 있습니다
간단히 알아 봅니다. 3차원 배열은 행렬의 행렬 구조 즉 큐브와 같은 형태를 떠올려야 합니다.
사실 이렇게 떠올려야 하는 자체가 피곤합니다 --; 그래서 사용하지 않았으면 한답니다 ㅎㅎ
(2,2,3) 인 3차원 배열을 생성해 보겠습니다
int[, ,] array =
new int[,,] { { { 1, 2, 3 }, { 4, 5, 6 } }, { { 7, 8, 9 }, { 10, 11, 12 } } };
다차원 배열의 차수를 계산하기 위해서는 중괄호의 개수와 꼼마(,)를 보면 됩니다
양 끝 중괄호는 무시하고 그 다음 중괄호의 개수와 그리고 그 다음 중괄호 개수
그리고 최종적으로 숫자를 꼼마(,)로 나열한 개수가 차원이 됩니다. 즉 위 코드에서는 2, 2, 3 의 차수를 가지게 됩니다
이는 2차원 이상 다차원 배열에 공히 적용되는 계산법입니다
아래 그림을 참고하세요

다차원배열의 모든 요소를 순회하기 위해서는 각 차원의 수를 계산하여 중첩루프를 돌려야 합니다
아래는 앞서 정의한 3차원 배열의 모든 요소를 순회하는 코드 입니다
for (int i = 0; i < array.GetLength(0); i++) //1차원 수(2개)
{
for (int j = 0; j < array.GetLength(1); j++) //2차원 수(2개)
{
for (int z = 0; z < array.GetLength(2); z++) //3차원 수(3개)
{
Console.Write( array[i, j, z]);
}
}
}
이전 강의에서 말씀 드렸듯이 다차원 배열의 모든 요소를 순회하기 위해 for 루프 대신 foreach 루프를 사용하면
보다 편리하게 순회할 수 있습니다. 아래 코드는 위의 for 루프와 동일한 결과를 가져다 줍니다
foreach (int value in array){
Console.Write(value);
}
가변 배열 ([][])
지금까지 살펴본 1차원, 다차원 배열은 각 차원의 크기가 고정되지만 가변배열을 이용하면 다양한 차원과 크기를
가지도록 구조화 할 수 있습니다
가변배열의 각 요소에는 또 다른 배열이 저장되는데요. 이 때 저장되는 배열의 크기는 서로 다른 크기를 가질 수 있습니다. 따라서 가변배열은 하나의 배열에 다양한 크기를 가진 듯 한 효과를 줄 수 있으며 요소로 배열을 저장하기 때문에 ‘배열의 배열’이라고도 합니다
아래 코드는 2개의 요소를 가진 1차원 가변배열을 생성하는 코드입니다
int[][] array = new int[2][];
array[0] = new int[] { 1, 2, 3 };
array[1] = new int[] { 1, 2, 3, 4 };
배열 0번째 요소는 크기가 3인 1차원 배열을 저장하며 1번째 요소는 크기가 4인 1차원 배열을 저장합니다
사실 저장한다기 보다는 ‘가리킨다’는 표현이 맞겠네요. 아래 그림을 참고하세요

이렇게 생성된 가변배열을 순회하려면 다음과 같이 작성할 수 있습니다
for (int i = 0; i < array.Length; i++){
for (int j = 0; j < array[i].Length; j++){
Console.Write("{0} ", array[i][j]);
}
Console.WriteLine();
}
주의할 점은 가변배열과 다차원 배열은 엄연히 다른 자료구조입니다.
그 표현법도 [,] (다차원 배열) , [][] 가변배열로 서로 상이합니다
배열의 기본 성질 및 추가 내용
- 숫자 타입의 배열 요소에는 기본 값으로 0이 저장됩니다.
단 가변배열을 포함하여 배열의 요소가 참조타입일 경우에는 null 이 기본 값으로 설정됩니다
- 모든 배열은 참조형식 입니다
배열의 요소가 값 형식이라 할 지라도 배열 자체는 참조형식 입니다
- 배열 표기법: int[] array (O), int array[] (X), int[3] array (X)
- 모든 배열은 System.Array 클래스로부터 파생됩니다
배열을 정의하면 컴파일러에 의해 자동으로 Array 클래스로부터 파생되도록 구현됩니다
따라서 Array 클래스에 정의된 배열을 조작하는 다양한 멤버들을 이용할 수 있습니다
System.Array 클래스이 유용한 멤버
모든 배열은 Array 클래스로부터 파생됩니다. 배열의 조작에 있어 Array 클래스에 정의된 유용한 멤버
몇 가지 살펴 봅니다
1) Rank 속성: 배열의 차원 반환
2) Length: 배열의 총 요소 수 반환
3) GetLength(int dimension): dimension에 지정된 차원의 요소 수 반환
4) Clone, CopyTo: 배열 복사
5) Array.Sort(Array): 1차원 배열의 정렬(퀵 정렬)
6) Array.Clear(Array,int,int): 배열 요소 값 지우기(초기화 시킴)
7) Array.IndexOf(Array,obejct): 배열에서 특정 요소 검색(일치하는 값의 인덱스 반환)
8) Array.BinarySearch(Array,object): 정렬된 배열에서 이진탐색 수행
System.Array 클래스에는 이 이외에도 많은 기능이 정의되어 있습니다.
필요 시 msdn을 참고바랍니다
좋은 한 주 되세요~~~