배열(C# 및 Java)

업데이트: 2007년 11월

배열은 데이터 형식이 동일한 항목의 순서가 지정된 컬렉션입니다. 배열에는 원하는 항목의 배열 시작 위치를 기준으로 한 오프셋과 함께 배열 이름을 사용하여 액세스합니다. Java와 비교할 때 C#에서 배열을 선언하고 사용하는 방법에는 몇 가지 중요한 차이가 있습니다.

1차원 배열

1차원 배열에는 일정한 수의 항목이 순차적인 방식으로 저장되므로 임의의 한 항목을 식별하기 위한 인덱스 값이 하나만 필요합니다. C#에서는 배열 선언의 대괄호 앞에 데이터 형식이 나와야 하며 Java에서와 달리 이 대괄호를 변수 이름 뒤에 배치할 수 없습니다. 따라서 integers 형식의 배열은 다음 구문을 사용하여 선언됩니다.

int[] arr1;

C#에서는 다음과 같은 선언을 사용할 수 없습니다.

//int arr2[];  //compile error

배열을 선언한 후에는 Java에서와 마찬가지로 new 키워드를 사용하여 배열의 크기를 설정할 수 있습니다. 다음 예제에서는 배열 참조를 선언합니다.

int[] arr;
arr = new int[5];  // create a 5 element integer array

그런 다음 Java와 동일한 구문을 사용하여 1차원 배열의 요소에 액세스합니다. C# 배열 인덱스도 0부터 시작합니다. 다음 예제에서는 이전 배열의 마지막 요소에 액세스합니다.

System.Console.WriteLine(arr[4]);  // access the 5th element

초기화

C# 배열 요소는 Java에서와 동일한 구문을 사용하여 만들 때 초기화할 수 있습니다.

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

Java의 경우와 달리 C# 이니셜라이저의 수는 배열 크기와 정확하게 일치해야 합니다. 이 기능을 사용하면 C# 배열을 한 줄에서 선언하고 초기화할 수 있습니다.

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

이 구문에서는 이니셜라이저의 수와 동일한 크기의 배열을 만듭니다.

프로그램 루프에서 초기화

C#에서는 for 루프를 사용하는 방식으로 배열을 초기화할 수도 있습니다. 다음 루프에서는 배열의 각 요소를 0으로 설정합니다.

int[] TaxRates = new int[5];

for (int i=0; i<TaxRates.Length; i++)
{
    TaxRates[i] = 0;
}

가변 배열

C#과 Java에서 사각형이 아닌 가변 배열을 만들 수 있습니다. 이 배열에서는 각 행에 포함된 열의 수가 다릅니다. 예를 들어, 다음 가변 배열의 첫 번째 행에는 엔트리 4개가 들어 있고 두 번째 행에는 엔트리 3개가 들어 있습니다.

int[][] jaggedArray = new int[2][];
jaggedArray[0] = new int[4];
jaggedArray[1] = new int[3];

다차원 배열

C#에서는 형식이 동일한 값의 매트릭스인 일반적인 다차원 배열을 만들 수 있습니다. Java와 C# 모두 가변 배열을 지원하는 반면, C#에서는 배열의 배열인 다차원 배열도 지원합니다.

다음 구문을 사용하여 다차원 사각형 배열을 선언합니다.

int[,] arr2D;      // declare the array reference
float[,,,] arr4D;  // declare the array reference

배열을 선언한 후에 다음과 같이 배열에 메모리를 할당합니다.

arr2D = new int[5,4];  // allocate space for 5 x 4 integers

배열의 요소에는 다음 구문을 사용하여 액세스합니다.

arr2D[4,3] = 906;

배열은 0부터 시작하므로 이 줄에서는 네 번째 행의 다섯 번째 열에 있는 요소를 906으로 설정합니다.

초기화

다차원 배열은 다음 방법 중 하나를 사용하여 단일 문으로 작성, 설정 및 초기화할 수 있습니다.

int[,] arr4 = new int [2,3] { {1,2,3}, {4,5,6} };
int[,] arr5 = new int [,]   { {1,2,3}, {4,5,6} };
int[,] arr6 =               { {1,2,3}, {4,5,6} };

프로그램 루프에서 초기화

배열의 모든 요소를 다음과 같이 중첩된 루프를 사용하여 초기화할 수 있습니다.

int[,] arr7 = new int[5,4];

for(int i=0; i<5; i++)
{
    for(int j=0; i<4; j++)
    {
        arr7[i,j] = 0;  // initialize each element to zero
    }
}

System.Array 클래스

.NET Framework에서 배열은 Array 클래스의 인스턴스로 구현됩니다. 이 클래스에서는 SortReverse 같은 여러 가지 유용한 메서드를 제공합니다.

다음 예제에서는 이러한 메서드를 사용하여 간단하게 작업하는 방법을 보여 줍니다. 먼저 Reverse 메서드를 사용하여 배열의 요소 순서를 반전시킨 다음 Sort 메서드를 사용하여 각 요소를 정렬합니다.

class ArrayMethods
{
    static void Main()
    {
        // Create a string array of size 5:
        string[] employeeNames = new string[5];

        // Read 5 employee names from user:
        System.Console.WriteLine("Enter five employee names:");
        for(int i=0; i<employeeNames.Length; i++)
        {
            employeeNames[i]= System.Console.ReadLine();
        }

        // Print the array in original order:
        System.Console.WriteLine("\nArray in Original Order:");
        foreach(string employeeName in employeeNames)
        {
            System.Console.Write("{0}  ", employeeName);
        }

        // Reverse the array:
        System.Array.Reverse(employeeNames);

        // Print the array in reverse order:
        System.Console.WriteLine("\n\nArray in Reverse Order:");
        foreach(string employeeName in employeeNames)
        {
            System.Console.Write("{0}  ", employeeName);
        }

        // Sort the array:
        System.Array.Sort(employeeNames);

        //  Print the array in sorted order:
        System.Console.WriteLine("\n\nArray in Sorted Order:");
        foreach(string employeeName in employeeNames)
        {
            System.Console.Write("{0}  ", employeeName);
        }
    }
}

출력

Enter five employee names:

Luca

Angie

Brian

Kent

Beatriz

Array in Original Order:

Luca Angie Brian Kent Beatriz

Array in Reverse Order:

Beatriz Kent Brian Angie Luca

Array in Sorted Order:

Angie Beatriz Brian Kent Luca

참고 항목

개념

C# 프로그래밍 가이드

참조

배열(C# 프로그래밍 가이드)

기타 리소스

Java 개발자를 위한 C# 프로그래밍 언어