C# 학습/C# 언어의 기초
C# 세미나 자료: 배열 (Array)
DevGourmet
2025. 4. 8. 01:15
1. 개요
배열은 동일한 형식의 데이터 요소를 연속적으로 저장하는 자료 구조로, C#에서 매우 자주 사용됩니다. 배열을 통해 고정된 크기의 데이터를 효율적으로 다룰 수 있으며, 다차원 배열, 가변 배열, 참조형/값형식 배열 등 다양한 형태로 확장할 수 있습니다.
이 세미나에서는 배열의 기본 개념부터 고급 표현식과 내부 동작까지 단계적으로 설명합니다.
2. 기본 이론
2.1 배열 선언과 기본 초기화
int[] numbers = new int[5];
- int[5]는 크기가 5인 정수 배열을 생성
- 배열의 모든 요소는 기본값으로 초기화됨
- int → 0, bool → false, string/class → null
2.2 배열 초기화 표현식
string[] names = { "Alice", "Bob", "Charlie" };
int[] scores = new[] { 90, 80, 70 };
- 배열 크기를 지정하지 않고 초기값을 나열 가능
- new 생략 가능 (var 또는 명시적 형식 사용 시)
3. 값 형식 vs 참조 형식 배열
int[] a = new int[3]; // 값 형식 (int)
string[] b = new string[3]; // 참조 형식 (string)
- 값 형식 배열: 요소 자체를 저장
- 참조 형식 배열: 각 요소는 null로 초기화되고, 실제 객체는 별도 생성 필요
b[0] = "Hello";
b[1] = "World";
4. 다차원 배열과 사각형 배열
4.1 다차원 배열 (Rectangular Arrays)
int[,] matrix = new int[2, 3];
matrix[0, 1] = 42;
- 2행 3열의 고정형 2차원 배열
- 내부는 하나의 블록 메모리로 구성됨
4.2 가변 배열 (Jagged Arrays)
int[][] jagged = new int[2][];
jagged[0] = new int[] { 1, 2 };
jagged[1] = new int[] { 3, 4, 5 };
- 배열 안에 배열을 담는 구조
- 각 행마다 다른 길이의 배열 사용 가능
5. 색인과 범위 점검
5.1 색인(Index) 기초
int[] arr = { 10, 20, 30 };
Console.WriteLine(arr[1]); // 20
5.2 범위 오류
Console.WriteLine(arr[3]); // IndexOutOfRangeException
- 배열의 인덱스는 항상 0부터 시작
- 경계를 벗어나면 런타임 예외 발생
5.3 반복문과 배열 길이
for (int i = 0; i < arr.Length; i++)
{
Console.WriteLine(arr[i]);
}
6. 고급: Span, Index, Range (C# 8+)
int[] nums = { 1, 2, 3, 4, 5 };
Index idx = ^1; // 끝에서 첫 번째 요소
Console.WriteLine(nums[idx]); // 5
Range r = 1..4;
int[] slice = nums[r]; // {2, 3, 4}
- ^1: 끝에서 첫 번째 요소
- 1..4: 인덱스 1부터 3까지 슬라이싱
7. 결론
- 배열은 정형화된 데이터 관리에 가장 효율적인 구조 중 하나
- 값 형식과 참조 형식의 초기화 차이를 이해하고 사용할 것
- 다차원 배열과 가변 배열은 상황에 맞게 선택
- 인덱스 사용 시 반드시 범위 점검 수행 → 예외 방지
- C# 8 이후에는 Span, Index, Range를 활용한 고급 배열 조작이 가능
8. Q&A
Q1. 배열 요소는 어떤 값으로 초기화되나요?
A1. 값 형식은 기본값(0, false 등), 참조 형식은 null로 자동 초기화됩니다.
Q2. 다차원 배열과 가변 배열의 차이는 뭔가요?
A2. 다차원 배열은 메모리가 연속적이고 고정 크기이며, 가변 배열은 배열의 배열로 행마다 크기가 다를 수 있습니다.
Q3. 배열 인덱스를 잘못 쓰면 어떤 일이 발생하나요?
A3. IndexOutOfRangeException 예외가 발생합니다.
Q4. 배열 크기를 동적으로 바꿀 수 있나요?
A4. 배열은 크기 고정입니다. 동적으로 변경하려면 List<T>와 같은 컬렉션을 사용해야 합니다