5. 배열
배열(Array)이란 동일한 데이터 타입의 데이터를 연속된 메모리 공간에 저장하는 자료구조입니다.
1. 배열의 선언
배열을 선언하는 방법은 다음과 같습니다.
// 배열의 선언
// 1. 배열의 타입 뒤에 []를 붙입니다.
int[] array1;
// 2. 배열의 타입 뒤에 []를 붙이고, 변수명 뒤에 []를 붙입니다.
int[] array2[];
// 3. 배열의 타입 뒤에 []를 붙이고, 변수명 뒤에 []를 붙이고, 변수명 뒤에 배열의 길이를 지정합니다.
int[] array3[10];
2. 배열의 초기화
배열을 선언하면, 배열의 각 요소는 해당 데이터 타입의 기본값으로 초기화됩니다.
int[] array = new int[10];
Console.WriteLine(array[0]); // 0
값을 지정하여 배열을 초기화할 수 있습니다. 아래 예제는 1부터 10까지의 값을 지정하여 배열을 초기화합니다.
int[] array = new int[10] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Console.WriteLine(array[0]); // 1
초기값이 정의되어 있다면 배열크기 지정은 생략할 수 있습니다.
int[] array = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Console.WriteLine(array[0]); // 1
.NET 8(C# 12) 부터는 대괄호 사이에 값을 지정하여 배열을 초기화 할 수 있습니다.
int[] array = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ];
Console.WriteLine(array[0]); // 1
현재는 int 형식만 다루고 있지만, 다른 데이터 타입도 동일한 방법으로 초기화할 수 있습니다.
string[] array = new string[3] { "Hello", "World", "!" };
Console.WriteLine(array[0]); // "Hello"
아직 배우지 않았지만, 클래스(class) 기반의 객체(object) 타입도 동일한 방법으로 초기화할 수 있습니다.
아래 예제는 이름과 나이로 구성된 사람 정보를 담기위한 Person 클래스를 선언하고, Person 클래스의 객체를 배열로 초기화합니다.
namespace HelloDotnet
{
internal class Program
{
static void Main(string[] args)
{
Person[] array = new Person[3] {
new Person { name = "홍길동", age = 20 },
new Person { name = "홍길순", age = 30 },
new Person { name = "홍길만", age = 40 }
};
Console.WriteLine(array[0].Name); // "홍길동"
}
}
class Person
{
public string name;
public int age;
}
}
위 예제는 신규 프로젝트 생성시
Do not use top-level statements
를 선택했을 떄 자동 생성되는Program.cs
파일을 토대로 작성하였습니다. 자세한 내용은 프로젝트 생성을 참고하시기 바랍니다.
3. 배열의 길이
배열의 길이는 Length
또는 Count()
함수를 통해 알 수 있습니다.
int[] array = new int[10];
Console.WriteLine(array.Length); // 10
4. 배열의 요소
배열의 요소는 배열의 인덱스를 통해 접근할 수 있습니다. 배열의 인덱스는 0부터 시작합니다.
int[] array = new int[10];
array[0] = 1;
Console.WriteLine(array[0]); // 1
5. 배열의 반복문
배열의 요소를 반복문을 통해 순회할 수 있습니다. 아래 예제는 배열의 요소를 반복문을 통해 순회하며, 각 요소의 값을 출력합니다. 반복문에 대한 자세한 내용은 8. 제어문을 참고하시기 바랍니다.
int[] array = new int[10] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
for (int i = 0; i < array.Length; i++)
{
Console.WriteLine(array[i]);
}
6. 다차원 배열
배열은 다차원으로 선언할 수 있습니다. 아래 예제는 2차원 배열을 선언하고, 초기화하는 예제입니다.
int[,] array = new int[2, 3] {
{ 1, 2, 3 },
{ 4, 5, 6 }
};
Console.WriteLine(array[0, 0]); // 1
Console.WriteLine(array[0, 1]); // 2
Console.WriteLine(array[0, 2]); // 3
Console.WriteLine(array[1, 0]); // 4
7. 동적 배열
배열은 동적으로 생성할 수 있습니다. 아래 예제는 List<T>
클래스를 사용하여 동적 배열을 생성하는 예제입니다. .NET에서 기본 제공되는 BCL(Base Class Library) 중 하나로, T
영역에 데이터 타입을 지정하면,
해당 타입의 요소를 추가하거나 제거할 수 있는 동적 배열 형식의 변수를 생성할 수 있습니다. 사용법이 익숙치 않으실 수 있으므로 아래 예제의 주석과 함께 참고하여 실행해보시기 바랍니다.
// 1. List<T> 클래스를 사용하기 위해 System.Collections.Generic 네임스페이스를 using 합니다.
using System.Collections.Generic;
// 2. List<T> 클래스의 인스턴스를 생성합니다. T 영역에는 int를 지정하여 int 형식의 요소를 추가하거나 제거할 수 있는 동적 배열 형식의 변수를 생성합니다.
List<int> array = new List<int>();
// 3. List<T> 클래스의 Add() 메서드를 사용하여 요소를 추가합니다.
array.Add(1);
// 4. List<T> 클래스의 인덱서를 사용하여 요소에 접근합니다.
Console.WriteLine(array[0]); // 1
// 5. List<T> 클래스의 Count 속성을 사용하여 요소의 개수를 확인합니다.
Console.WriteLine(array.Count); // 1
잠깐 소개한
List<T>
를 포함하여, 배열(Array), 리스트(List), 딕셔너리(Dictionary)등을 통틀어 컬렉션(Collection)이라고 부릅니다. 컬렉션은 여러 개의 데이터를 담을 수 있는 자료구조를 의미합니다. 컬렉션에 대한 자세한 내용은 C# 컬렉션을 참고하시기 바랍니다.