Section 20.9: 가변 배열 (Jagged array)

가변 배열 (Jagged array) 은 기본 형식 타입 (primitive type) 대신에, 다른 배열 (혹은 컬렉션) 들을 갖는 배열을 의미한다. 어떤 의미에서는 이는 배열 각 요소에 다른 배열이 포함된, "배열의 배열" 로도 생각할 수 있다.

이들은 기본적으로 다차원 배열과도 유사하지만, 작은 차이점이 있다 - 다차원 배열의 경우에는 미리 정해진 수의 행과 열을 가질 수 밖에 없으나, 가변 배열에서는 모든 행 (row) 은 각각 다른 갯수의 열 (column) 을 가질 수 있게 된다.

가변 배열 선언하기

8 개의 행을 갖는 가변 배열을 선언하는 예제는 다음과 같다:

int[][] a = new int[8][];

두번째 [] 는 숫자가 주어지지 않은 상태에서 초기화 된다. 하위 배열들까지 모두 초기화를 하고자 한다면, 별도의 초기화를 수행해 주어야 한다:

for (int i = 0; i < a.length; i++) { a[i] = new int[10]; }

값을 쓰고 읽기

하위 배열 중 하나를 읽는 작업은 간단하다. a 의 세번째 행 내의 모든 숫자를 출력하는 다음 예제를 확인한다:

for (int i = 0; i < a[2].length; i++) { Console.WriteLine(a[2][i]); }

특정 값을 읽기:

a[<행 번호>][<열 번호>]

특정 값 쓰기:

a[<행 번호>][<열 번호>] = <값>

유념할 점: 거의 모든 경우에, 가변 배열 (배열의 배열) 을 사용하는 것이 다차원 배열 (행렬) 을 사용하는 것보다 권장된다. 속도 면에서도 빠르며 더욱 안전하다.

중괄호들의 순서에 대한 주의점

int 형식의, 하나의 배열로 이루어진 다섯개의 배열들을 갖는 세개의 배열을 나타내는 3차원 배열이 있다고 가정해 보자. 이를 C# 에서 다음과 같이 작성할 수 있다:

int[,,][,,,,][] arr = new int[8, 10, 12][,,,,][];

CLR 타입 시스템에서는, 이 중괄호들의 표현 순서가 뒤바뀌게 되어, 위에서 선언한 arr 인스턴스는 아래와 같이 표현된다:

arr.GetType().ToString() == "System.Int32[][,,,,][,,]";

마찬가지로 다음의 예제도 확인한다:

typeof(int[,,][,,,,][]).ToString() == "System.Int32[][,,,,][,,]"
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

+ Recent posts