Favicon

Collection type

Peponi11/21/20245m

C#
SyntaxTypeListDictionary

1. Introduction

.NET 런타임은 객체 그룹을 관리하는 다양한 컬렉션 형식을 제공한다. 일부 컬렉션 형식 (Array, System.Span<T>, System.Memory<T>) 은 C# 언어로 인식된다. 또한 IEnumerable<T>와 같은 인터페이스는 컬렉션의 요소를 열거하기 위한 언어로 인식된다. C# 12부터, 컬렉션은 컬렉션 식을 사용하여 초기화할 수 있다.

컬렉션은 다음과 같은 특징으로 분류할 수 있다.

  1. 요소 액세스 : 컬렉션을 열거하고 각 요소에 액세스하는 방법이 다르다.
    • 인덱스 : List<T>와 같은 컬렉션은 각 요소의 위치인 인덱스를 통해 요소에 액세스한다.
    • 키 : Dictionary<TKey, TValue>와 같은 컬렉션은 키를 통해 요소에 액세스한다.
  2. 성능 프로필 : 각 컬렉션은 요소 추가, 찾기 또는 제거와 같은 작업에 대해 성능 프로필이 다르다.
  3. 동적 확장 및 축소
    • 많은 컬렉션은 동적으로 요소를 추가하거나 제거하는 것이 가능하다.
    • 일부 컬렉션 (Array, System.Span<T>, System.Memory<T>, ...) 의 경우 동적 확장 및 추가가 불가하다.
  4. 동시 액세스 : 특정 컬렉션 (System.Collections.Concurrent) 은 다중 스레드 시나리오에서 액세스에 대한 보안을 제공한다.

특정 시나리오에 대한 컬렉션 선택에 대해서는 Collection 클래스 선택을 참조한다.

2. 인덱싱 가능한 컬렉션

인덱스를 통해 요소에 액세스 하는 컬렉션의 인덱스는 0부터 시작한다. 다음은 List<T>를 이용한 간단한 예시이다.

List<int> ints = [1, 2, 3, 4, 5];
 
var second = ints.ElementAt(2);     // 3번째 요소 확인
 
ints[2] = 7;               // 3번째 요소를 7로 교체
 
ints.RemoveAt(3);       // 4번째 요소를 제거
 
ints.ForEach(x => Console.Write($"{x} "));
 
/* output:
1 2 7 5
*/

3. 키, 값 컬렉션

키를 통해 요소에 액세스 하는 컬렉션의 접근은 인덱스를 통한 방법과 동일하다. 다음은 Dictionary<TKey, TValue>를 이용한 간단한 예시이다.

Dictionary<string, int> dic = new() {
{ "Zero", 0 },
{ "One", 1 },
{ "Two", 2 },
{ "Three", 3 },
{ "Four", 4 }
};
 
Console.WriteLine(dic.ContainsKey("Three"));    // Three 요소 확인
 
dic["Three"] = 7;            // Three 요소를 7로 교체
 
dic.Remove("One");         // One 요소 제거
 
foreach (var pair in dic)
{
    Console.WriteLine($"Key : {pair.Key}, value : {pair.Value}");
}
 
/* output:
True
Key : Zero, value : 0
Key : Two, value : 2
Key : Three, value : 7
Key : Four, value : 4
*/

4. 반복기

반복기는 컬렉션에 대한 반복 작업을 수행하는 데 사용한다. 프로퍼티의 getter 또는 메서드일 수 있으며 foreach, yield return문을 사용한다.

다음은 반복기를 사용하는 간단한 예시이다.

List<int> ints = [1, 10, 6, 3, 4, 7];
 
foreach (int value in GetUnder5(ints))
{
    Console.Write($"{value} ");
}
 
IEnumerable<int> GetUnder5(List<int> ints)
{
    foreach (int value in ints)
    {
        if (value < 5) yield return value;
    }
}
 
/* output:
1 3 4
*/

5. LINQ

LINQ를 사용하여 컬렉션에 액세스 할 수 있다. 다음 예시에서는 LINQ 쿼리를 이용하는 간단한 예시이다.

List<int> ints = [1, 10, 6, 3, 4, 7];
 
var result = from value in ints
             where value < 5
             select value;
 
foreach (var value in result) Console.Write($"{value} ");
 
/* output:
1 3 4
*/

6. 참조 자료