C# 배열 마스터하기: 효율적 데이터 저장과 접근
배열(Array)은 같은 타입의 요소를 고정된 크기로 순차적으로 저장하는 컬렉션입니다. 배열은 데이터를 저장하는 용도뿐 아니라, 동일한 타입의 변수들이 연속된 메모리 위치에 저장된 집합으로 생각하는 것이 더 유용합니다.
개별 변수(number0, number1, ..., number99)를 선언하는 대신, 하나의 배열 변수(numbers)를 선언하고 numbers[0], numbers[1], ..., numbers[99]로 개별 요소에 접근합니다. 특정 요소는 인덱스(Index)로 접근합니다.
모든 배열은 연속된 메모리 위치로 구성됩니다. 가장 낮은 주소가 첫 번째 요소, 가장 높은 주소가 마지막 요소에 해당합니다.
배열 선언 (Declaration)
데이터타입[] 배열이름;
데이터타입: 배열 요소의 타입 지정
[]: 배열의 차수(rank) 지정, 크기를 나타냄
배열이름: 배열 변수명
double[] balance;
배열 초기화 (Initialization)
선언만으로는 메모리에 배열이 생성되지 않습니다. new 키워드로 인스턴스를 생성해야 합니다 (배열은 참조 타입).
double[] balance = new double[10]; // 크기 10인 double 배열 생성
배열에 값 할당
인덱스로 개별 할당
double[] balance = new double[10];
balance[0] = 4500.0;
선언과 동시에 초기화
double[] balance = { 2340.0, 4523.69, 3421.0 };
크기 지정하여 생성과 초기화 동시
int[] marks = new int[5] { 99, 98, 92, 97, 95 };
크기 생략 (자동 추론)
int[] marks = new int[] { 99, 98, 92, 97, 95 };
배열 복사 (참조 복사 주의!)
int[] marks = new int[] { 99, 98, 92, 97, 95 };
int[] score = marks; // 같은 메모리 위치를 참조 (얕은 복사)
주의: 배열 변수 간 대입은 참조 복사입니다. 실제 값 복사가 필요하면 Array.Copy()나 Clone()을 사용하세요.
배열 생성 시 C# 컴파일러는 타입별 기본값으로 암시적 초기화합니다 (int 배열 → 0, bool 배열 → false, 참조 타입 → null).
배열 요소 접근
double salary = balance[9]; // 10번째 요소 접근 (0-based index)
종합 예제: 선언, 할당, 접근
using System;
namespace ArrayApplication
{
class MyArray
{
static void Main(string[] args)
{
int[] n = new int[10];
int i, j;
// 배열 요소 초기화
for (i = 0; i < 10; i++)
{
n[i] = i + 100;
}
// 각 요소 값 출력
for (j = 0; j < 10; j++)
{
Console.WriteLine("Element[{0}] = {1}", j, n[j]);
}
Console.ReadKey();
}
}
}
출력: Element[0] = 100 ~ Element[9] = 109
foreach 루프로 배열 순회
for 루프 대신 foreach 문을 사용하면 인덱스 관리 없이 간편하게 순회할 수 있습니다.
foreach (int j in n)
{
int i = j - 100;
Console.WriteLine("Element[{0}] = {1}", i, j);
}
C# 배열 관련 중요 개념
| 번호 | 개념 및 설명 |
| 1 | 다차원 배열 (Multi-dimensional Arrays) C#은 다차원 배열을 지원. 가장 간단한 형태는 2차원 배열. |
| 2 | 가변 배열 (Jagged Arrays) 배열의 배열. 각 행의 크기가 다를 수 있음. |
| 3 | 함수에 배열 전달 인덱스 없이 배열 이름만 지정하여 배열에 대한 포인터(참조) 전달. |
| 4 | 가변 길이 매개변수 (Params Arrays)
params 키워드로 알 수 없는 개수의 매개변수 전달 가능. |
| 5 | Array 클래스
System 네임스페이스에 정의. 모든 배열의 기본 클래스. 배열 작업을 위한 다양한 속성/메서드 제공. |
다차원 배열 예제
// 2차원 배열 (3행 4열)
int[,] matrix = new int[3, 4]
{
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
// 접근
int val = matrix[1, 2]; // 7
가변 배열 예제
// 가변 배열 (행마다 다른 크기)
int[][] jagged = new int[3][];
jagged[0] = new int[] { 1, 2 };
jagged[1] = new int[] { 3, 4, 5, 6 };
jagged[2] = new int[] { 7 };
// 접근
int val = jagged[1][2]; // 5
params 키워드 예제
public int Sum(params int[] numbers)
{
int total = 0;
foreach (int n in numbers) total += n;
return total;
}
// 호출
Sum(1, 2, 3); // 6
Sum(1, 2, 3, 4, 5); // 15
int[] arr = {10, 20};
Sum(arr); // 30