배열 및 컬렉션(Visual C# Express)
업데이트: 2007년 11월
관련된 데이터 항목을 그룹으로 저장하는 것은 대부분의 소프트웨어 응용 프로그램에서 기본적으로 필요합니다. 주로 배열과 컬렉션을 사용하여 이러한 작업을 수행할 수 있습니다.
배열
배열은 동일한 형식을 가진 개체들을 모아 놓은 것입니다. 배열의 길이에는 거의 제한이 없으므로 수천 또는 수백만 개의 개체를 저장하는 데 배열을 사용할 수 있지만, 그 크기는 배열을 만들 때 결정됩니다. 배열의 각 항목에는 색인을 통해 액세스할 수 있습니다. 색인은 배열에서 개체가 저장된 위치 또는 슬롯을 나타내는 숫자입니다. 배열을 사용하여 참조 형식 및 값 형식을 모두 저장할 수 있습니다.
1차원 배열
배열은 인덱싱된 개체 컬렉션입니다. 개체의 1차원 배열은 다음과 같이 선언됩니다.
type[] arrayName;
일반적으로 배열을 선언할 때 다음과 같이 배열의 요소도 초기화합니다.
int[] array = new int[5];
숫자 배열 요소의 기본값은 0이고 참조 요소의 기본값은 null입니다. 그러나 배열을 만드는 동안 다음과 같이 값을 초기화할 수 있습니다.
int[] array1 = new int[] { 1, 3, 5, 7, 9 };
또는 다음과 같이 값을 초기화할 수도 있습니다.
int[] array2 = {1, 3, 5, 7, 9};
배열은 0부터 시작하는 인덱스를 사용하므로 배열의 첫째 요소는 요소 0입니다.
string[] days = {"Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat"};
System.Console.WriteLine(days[0]); // Outputs "Sun"
다차원 배열
개념적으로 차원이 두 개인 다차원 배열은 표와 같습니다. 차원이 세 개인 다차원 배열은 큐브와 같습니다.
// declare multidimension array (two dimensions)
int[,] array2D = new int[2,3];
// declare and initialize multidimension array
int[,] array2D2 = { {1, 2, 3}, {4, 5, 6} };
// write elements in a multidimensional array
for (int i=0; i<2; i++)
{
for (int j=0; j<3; j++)
{
array2D[i,j] = (i + 1) * (j + 1);
}
}
// read elements in a multidimensional array
for (int i=0; i<2; i++)
{
for (int j=0; j<3; j++)
{
System.Console.Write(array2D[i,j]);
}
System.Console.WriteLine();
}
가변 배열
가변 배열, 즉 배열의 배열은 다차원 배열의 변형입니다. 가변 배열은 1차원 배열이지만 각 요소도 배열입니다. 요소 배열의 크기는 모두 같지 않아도 됩니다.
가변 배열은 다음과 같이 선언합니다.
int[][] jaggedArray = new int[3][];
이렇게 하면 세 개의 배열로 이루어진 배열이 만들어집니다. 이러한 배열을 다음과 같이 초기화할 수 있습니다.
jaggedArray[0] = new int[5];
jaggedArray[1] = new int[4];
jaggedArray[2] = new int[2];
foreach 문 사용
foreach 문은 대개 배열에 저장된 각 요소에 액세스하는 데 사용됩니다.
int[] numbers = { 4, 5, 6, 1, 2, 3, -2, -1, 0 };
foreach (int i in numbers)
{
System.Console.Write("{0} ", i);
}
//Output: 4 5 6 1 2 3 -2 -1 0
개체의 배열
정수 등의 단순한 데이터 형식이 아니라 개체로 구성된 배열을 만드는 과정은 두 단계로 이루어집니다. 먼저 배열을 선언한 다음 배열에 저장되는 개체를 만들어야 합니다. 이 예제에서는 오디오 CD를 정의하는 클래스를 만듭니다. 그런 다음 20개의 오디오 CD를 저장하는 배열을 만듭니다.
namespace CDCollection
{
// Define a CD type.
class CD
{
private string album;
private string artist;
private int rating;
public string Album
{
get {return album;}
set {album = value;}
}
public string Artist
{
get {return artist;}
set {artist = value;}
}
public int Rating
{
get {return rating;}
set {rating = value;}
}
}
class Program
{
static void Main(string[] args)
{
// Create the array to store the CDs.
CD[] cdLibrary = new CD[20];
// Populate the CD library with CD objects.
for (int i=0; i<20; i++)
{
cdLibrary[i] = new CD();
}
// Assign details to the first album.
cdLibrary[0].Album = "See";
cdLibrary[0].Artist = "The Sharp Band";
cdLibrary[0].Rating = 10;
}
}
}
컬렉션
배열은 C#을 사용하여 데이터 집합을 저장하기 위한 여러 방법 중 하나일 뿐입니다. 어떤 방법을 선택할지는 항목을 조작하거나 액세스하는 방법을 비롯한 여러 요인에 따라 달라집니다. 예를 들어 항목을 컬렉션의 시작 위치나 중간에 삽입하려는 경우에는 일반적으로 목록을 사용하는 것이 배열을 사용하는 것보다 빠릅니다. 컬렉션 클래스의 다른 형식으로는 맵, 트리 및 스택이 있으며 각 형식마다 나름의 장점이 있습니다. 자세한 내용은 System.Collections 및 System.Collections.Generic을 참조하십시오.
다음 예제에서는 List<T> 클래스를 사용하는 방법을 보여 줍니다. Array 클래스와는 달리 목록의 중간에 항목을 삽입할 수 있습니다. 이 예제에서는 목록의 항목이 문자열이 되도록 제한합니다.
public class TestCollections
{
public static void TestList()
{
System.Collections.Generic.List<string> sandwich = new System.Collections.Generic.List<string>();
sandwich.Add("bacon");
sandwich.Add("tomato");
sandwich.Insert(1, "lettuce");
foreach (string ingredient in sandwich)
{
System.Console.WriteLine(ingredient);
}
}
}