[C#] 컬렉션

KYJ의 Tech Velog·2023년 7월 24일
0

C#

목록 보기
5/6

컬렉션 (Collection)

프로그래밍에 있어서 자료를 효율적으로 관리하는 것은 중요한 일입니다. 이를 위해 사용하는 것이 바로 자료구조입니다.

컬렉션(Collection)은 C#에서 지원하는 자료구조 클래스입니다.

컬렉션은 object 형식을 사용하여 데이터를 관리합니다. 그래서 앞선 포스팅에서 설명드렸던 박싱과 언박싱이 발생하게 됩니다. 따라서 컬렉션을 많이 사용하게 되면 프로그램의 성능 저하를 유발합니다.

결과적으로 현재 C#에서는 컬렉션은 잘 사용하지 않습니다.

그래서 사용하는 것이 바로 제네릭 컬렉션입니다.


제네릭 컬렉션 (Generic Collection)

제네릭(Generic)의 의미는 일반화라고 생각하면 이해하기 쉬울 것 같습니다.

컬렉션을 사용할 때 데이터의 형식을 통일(일반화)하여 기존 컬렉션의 성능 문제를 줄일 수 있는 것이 바로 제네릭 컬렉션입니다.

제네릭 컬렉션에는 List<T>, Dictionary<T>, Queue<T>, Stack<T> 등의 클래스가 있습니다.

여담이지만 저는 Key, Value 쌍으로 데이터를 관리하는 Dictionary<T> 클래스를 가장 자주 사용합니다. 특정 ID를 통해 데이터를 관리하는 게 정말 편리하더라구요 :)

제네릭 컬렉션은 System.Collections.Generic을 using 지시문으로 선언해주어야 합니다. Unity에서 C# 스크립트를 새로 만들면 자동적으로 선언되어 있습니다.

using System.Collections.Generic;

List<T>

List<T> 클래스는 배열 크기를 미리 선언할 필요가 없는 가변배열입니다.

다음은 List<T> 클래스의 생성자, 속성, 메서드입니다.

// List<T> 생성자
List<string> items = new List<string>();

// Add(T) Method : List<T> 끝에 오브젝트를 추가합니다.
items.Add("Wood"); 
items.Add("Stone");
items.Add("Stick");
items.Add("Sword");

// items = {"Wood", "Stone", "Stick", "Sword"}

// Count 속성 : 요소의 개수
Console.WriteLine(items.Count); // 4

// Item[Int32] 속성
Console.WriteLine(items[2]); // Stick

// Remove(T) 메서드 : 처음으로 나오는 특정 오브젝트를 삭제합니다.
items.Remove("Stick"); 
Console.WriteLine(items.Count); // 3

// Clear() 메서드 : 모든 요소를 삭제합니다.
items.Clear(); 

생성자, 속성, 메서드에 관련된 추가 정보들은 마이크로소프트 공식 문서를 참고하시면 좋을 거 같습니다.

Dictionary<T>

Dictionary<T> 클래스는 Key, Value 쌍으로 데이터를 관리하는 자료구조 클래스입니다. Key는 유일해야 하고 Key를 통해 Value에 접근할 수 있습니다.

다음은 Dictionary<T> 클래스의 생성자, 속성, 메서드입니다.

// Dictionary<T> 생성자
Dictionary<int, string> items = new Dictionary<int, string>();

// Add() 메서드 : Key, Value 쌍을 추가합니다.
items.Add(1, "Wood"); 
items.Add(2, "Stone");
items.Add(3, "Stick");
items.Add(4, "Sword");

// items = {1: "Wood", 2: "Stone", 3: "Stick", 4: "Sword"}

// Count 생성자 : Key, Value 쌍의 개수
Console.WriteLine(items.Count); // 4

// Item[TKey] 속성
Console.WriteLine(items[2]); // Stone

// Remove(TKey) 메서드 : 특정 Key를 삭제합니다. Key, Value 쌍이 삭제됩니다.
items.Remove(1);
// ContainsKey(TKey) 메서드 : 특정 Key가 있는지 확인합니다.
if (!items.ContainsKey(1))
{
	Console.WriteLine("Key 1 is not found");
}

// Clear() 메서드 : 모든 Key, Value 쌍을 삭제합니다.
items.Clear(); 

마찬가지로 추가적인 정보들은 마이크로소프트 공식 문서를 참고하시면 되겠습니다.

Stack<T>과 Queue<T>도 자주 사용하는데 이 자료구조가 이런 자료구조다라고 설명하는 포스팅이 아니기 때문에 설명은 생략하도록 하겠습니다.

생성자, 속성, 메서드는 마이크로소프트 공식 문서를 참고하시면서 사용해보면 좋을 거 같습니다.


Reference

마이크로스프트 공식 문서

1개의 댓글

comment-user-thumbnail
2023년 7월 24일

글 잘 봤습니다.

답글 달기