[C#] 3.3 배열

여러분도 잘 알다시피 배열은 같은 형식의 여러 개의 요소(원소)를 포함하는 데이터 구조입니다. C#에서는 효과적으로 배열을 표현하기 위해 추상 클래스 Array를 제공하고 있으며 모든 배열은 Array 기반의 파생 클래스 형식 개체입니다. 먼저, 가장 단순한 1차원 배열을 선언하고 사용하는 예를 살펴보기로 합시다.

▶ 1차원 배열의 선언

int[] arr1;
arr1 = new int[5];
int[] arr2 = new int[5];
int[] arr3 = new int[] { 1, 2, 3, 4, 5 };
int[] arr4 = new int[5] { 1, 2, 3, 4, 5 };

1차원 배열은 변수 선언 시에 요소 형식과 배열명 사이에 [ ]를 명시하여 선언합니다. 그리고 개체를 생성할 때에는 new 연산자와 요소 형식, [요소 개수]를 명시합니다. 1차원 배열을 선언과 동시에 초기화할 때는 초기값을 { }안에 명시하여 초기화하거나 요소의 개수를 명시하여 개체를 생성하면 됩니다. 만약, 초기값을 명시하지 않으면 기본값으로 초기화가 되며 초기값을 명시하면 요소의 개수를 명시하지 않아도 됩니다.

배열을 사용할 때에는 배열명과 인덱스 연산자([ ])및 요소의 상대적 위치(0부터 시작)를 통해 각 요소에 접근할 수 있으며 이 외에 기반 클래스인 Array에서 제공되는 다양한 속성과 메서드를 사용할 수 있습니다.

▶배열의 인덱스 연산자 사용

int[] arr = new int[4]{10,8,1,6};
for (int i = 0; i < arr.Length; i++)
{
    Console.Write("{0} ", arr[i]);
}

▶실행 결과

10 8 1 6

▶Array 추상 클래스의 정적 메서드 Sort 사용

int[] arr = new int[4] { 5, 8, 2, 1 };
Console.WriteLine("요소의 개수:{0}", arr.Length);
foreach (int elem in arr)
{
    Console.WriteLine(elem.ToString());
}
Array.Sort(arr);
Console.WriteLine("정렬 후");
foreach (int elem in arr)
{
    Console.WriteLine(elem.ToString());
}

▶ 실행 결과

요소의 개수:4
5
8
2
1
정렬 후
1
2
5
8

C#에서 다차원 배열은 다음과 같이 선언하여 사용할 수 있습니다.

▶다차원 배열 선언

int[,] arr1;
arr1 = new int[2, 3];
arr1 = new int[,] { { 1, 2, 3 }, { 4, 5, 6, } }; 
int[, ,] arr2 = new int[4, 2, 3];
int[,] arr3 = new int[,]{{1,2},{4,5},{5,6}}; 
int[,] arr4 = new int[3,2] { { 1, 2 }, { 4, 5 }, { 5, 6 } };

C#에서 다차원 배열을 선언할 때 [ ]안에 콤마를 통해 차수를 결정할 수 있습니다. 그리고 개체를 생성할 때는 각 차수의 요소 개수를 명시하거나 초기값을 명시하여 개체를 생성해야 합니다. 다차원 배열을 사용할 때도 각 차수의 상대적 거리를 인덱스 연산자 내부([상대적 거리, 상대적 거리])에 명시하여 사용합니다.

▶다차원 배열에서 인덱스 연산자([ ]) 사용

int[,] arr = new int[3, 2] { { 1, 2 }, { 4, 5 }, { 5, 6 } };
Console.WriteLine("차수:{0} 요소의 개수:{1}", arr.Rank, arr.Length);
arr[2, 1] = 8;
for (int i = 0; i < 3; i++)
{
    for (int j = 0; j < 2; j++)
    {
        Console.WriteLine("arr[{0},{1}]:{2}", i,j, arr[i, j]);
    }
}
foreach (int elem in arr)
{
    Console.WriteLine(elem.ToString());
}

▶ 실행 결과

차수:2 요소의 개수:6
arr[0,0]:1
arr[0,1]:1
arr[1,0]:1
arr[1,1]:1
arr[2,0]:1
arr[2,1]:1
1
2
4
5
5
8

C#에서는 가변 길이의 배열을 지원합니다. 가변 배열은 배열을 요소로 하는 배열로 각 요소 배열의 크기를 다르게 지정할 수 있습니다.

▶ 가변 길의 배열의 선언

int[][] arr1;
arr1 = new int[2][];
arr1[0] = new int[3];
arr1[1] = new int[6];
int[][] arr2 = new int[3][];
arr2[0] = new int[3];
arr2[1] = new int[] { 1, 2, 3, 4 };
arr2[2] = new int[2] { 1, 2 };
int[][] arr3 = new int[][] { new int[] { 1, 2, 3 }, new int[]{ 4, 5, 6 } };

가변 배열은 요소를 지정하지 않으면 초기값인 null로 초기화됩니다. 그리고 각 요소에 배열 개체가 올 수 있으므로 이를 이용하면 다양한 형태의 배열을 사용할 수 있습니다.

▶ 가변 길이 배열의 사용 예

int[][] array = new int[][] { new int[] { 1, 2, 3 }, new int[] { 4, 5 } };

foreach (int[] elemArray in array)
{
    foreach (int elem in elemArray)
    {
        Console.Write(elem.ToString());
    }
    Console.WriteLine();
}

▶실행 결과

1 2 3
4 5

여기에서는 가장 기본적인 컬렉션인 배열에 대해서만 다루었으며 좀 더 다양한 컬렉션에 대해서는 9장 컬렉션과 인터페이스에서 설명할게요.