[ ]
) 안에 인덱스를 넣어 표시한다.A[0]
으로 표시한다.2차 이상의 다차원 배열은
(1)각 차원별 요소 크기가 고정된 Rectangular
배열과
(2) 각 차원별 크기가 서로 다른 가변배열
로 나뉠 수 있다.
다음은 1차 배열과 2차, 3차 배열(C-Style의 Rectangular 배열)을 선언하는 예이다.
// 1차 배열
string[] players = new string[10];
string[] Regions = { "서울", "경기", "부산" };
// 2차 배열 선언 및 초기화
string[,] Depts = {{"김과장", "경리부"},{"이과장", "총무부"}};
// 3차 배열 선언
string[,,] Cubes;
아래 예제에서 배열
players
는 10개의 string 요소를 갖도록 선언되었고,
Regions
/Depts
는 각각 1차,2차 배열이며 초기화 값들을 할당하고 있다.
마지막의Cubes
는 3차배열을 선언한 예이다.
[,]
와 같이 괄호안에 콤마로 분리하여 (C 언어 스타일) 다차원을 표현한다. [][]
와 같이 각 차원마다 괄호를 별도로 사용한다 (Java 언어 스타일).가변 배열은 배열의 배열(array of arrays)이라 불리우는데,
첫번째 차원의 크기는 컴파일 타임에 확정되어야 하고,
그 이상 차원은 런타임시 동적으로 서로 다른 크기의 배열로 지정할 수 있다.
이러한 가변 배열은 각 차원별 배열 요소가 불규칙하여 Rectangular 배열처럼 고정된 크기를 사용하면 메모리의 낭비가 심한 경우에 사용하면 유용하다.
//Jagged Array (가변 배열)
//1차 배열 크기(3)는 명시해야
int[][] A = new int[3][];
//각 1차 배열 요소당 서로 다른 크기의 배열 할당 가능
A[0] = new int[2];
A[1] = new int[3] { 1, 2, 3 };
A[2] = new int[4] { 1, 2, 3, 4 };
A[0][0] = 1;
A[0][1] = 2;
C# 배열은 각 요소를 인덱스를 사용하여 엑세스한다.
ex. Regions 배열의 첫번째 요소 : Regions[0]
두번째 요소 : Regions[1]
모든 C# 배열은 내부적으로 .NET Framework의 System.Array
에서 파생된 것이다.
따라서, System.Array
의 메서드, 프로퍼티를 사용할 수 있다.
다음 예제는 점수 배열(scores)
을 하나 하나 엑세스하면서 총합을 구하는 예이다.
static void Main(string[] args)
{
int sum = 0;
int[] scores = { 80, 78, 60, 90, 100 };
for (int i = 0; i < scores.Length; i++)
{
sum += scores[i];
}
Console.WriteLine(sum);
}
배열 scores의 사이즈를 구하기 위하여
scores.Length
처럼 .Length 속성을 사용하였는데, 이는System.Array
클래스에 정의된 속성이다.
C#에서 배열 전체를 전달하기 위해서는
배열은 레퍼런스(Reference)
타입이기 때문에, 배열을 다른 객체나 메서드에 전달할 때 직접 모든 배열 데이터를 복사하지 않고, 배열 전체를 가리키는 참조 값(Reference pointer)
만을 전달한다.
즉, 전달하는 쪽에서는 단순히 레퍼런스인 배열명을 사용하며,
받는 쪽에서는 아래 예제와 같이 배열 데이터 타입 및 배열 파라미터명을 사용한다.
static void Main(string[] args)
{
int[] scores = { 80, 78, 60, 90, 100 };
int sum = CalculateSum(scores); // 배열 전달: 배열명 사용
Console.WriteLine(sum);
}
static int CalculateSum(int[] scoresArray) // 배열 받는 쪽
{
int sum = 0;
for (int i = 0; i < scoresArray.Length; i++)
{
sum += scoresArray[i];
}
return sum;
}