Collection type
Peponi │ 11/21/2024 │ 5m
C#
SyntaxTypeListDictionary
Collection type
11/21/2024
5m
Peponi
C#
SyntaxTypeListDictionary
1. Introduction
.NET 런타임은 객체 그룹을 관리하는 다양한 컬렉션 형식을 제공한다. 일부 컬렉션 형식 (Array, System.Span<T>, System.Memory<T>) 은 C# 언어로 인식된다. 또한 IEnumerable<T>와 같은 인터페이스는 컬렉션의 요소를 열거하기 위한 언어로 인식된다. C# 12부터, 컬렉션은 컬렉션 식을 사용하여 초기화할 수 있다.
컬렉션은 다음과 같은 특징으로 분류할 수 있다.
- 요소 액세스 : 컬렉션을 열거하고 각 요소에 액세스하는 방법이 다르다.
- 인덱스 : List<T>와 같은 컬렉션은 각 요소의 위치인 인덱스를 통해 요소에 액세스한다.
- 키 : Dictionary<TKey, TValue>와 같은 컬렉션은 키를 통해 요소에 액세스한다.
- 성능 프로필 : 각 컬렉션은 요소 추가, 찾기 또는 제거와 같은 작업에 대해 성능 프로필이 다르다.
- 동적 확장 및 축소
- 많은 컬렉션은 동적으로 요소를 추가하거나 제거하는 것이 가능하다.
- 일부 컬렉션 (Array, System.Span<T>, System.Memory<T>, ...) 의 경우 동적 확장 및 추가가 불가하다.
- 동시 액세스 : 특정 컬렉션 (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
*/