본문 바로가기
Programming

C# 컬렉션과 제네릭

by 나무수피아는 지식의 가지를 뻗어가는 공간입니다. 2025. 12. 9.
반응형

컬렉션 소개

   C#에서 컬렉션은 여러 데이터를 저장하고 처리하는 데 사용되는 클래스들입니다. .NET Framework는 여러 종류의 컬렉션을 제공합니다. 그 중 가장 많이 사용되는 것들은 `List`, `Dictionary<TKey, TValue>`, `Queue`, `Stack`입니다. 각 컬렉션의 사용법을 알아보겠습니다.

List

`List`는 동적으로 크기를 조정하는 배열로, 인덱스를 통해 데이터에 접근할 수 있습니다.


List numbers = new List();
numbers.Add(10);
numbers.Add(20);
numbers.Add(30);

Console.WriteLine("List items:");
foreach(var number in numbers)
{
    Console.WriteLine(number);
}

Dictionary<TKey, TValue>

`Dictionary<TKey, TValue>`는 키와 값을 쌍으로 저장하는 컬렉션입니다. 각 항목은 고유한 키로 접근됩니다.


Dictionary<string, int> ages = new Dictionary<string, int>();
ages["John"] = 25;
ages["Alice"] = 30;

Console.WriteLine("Dictionary items:");
foreach(var entry in ages)
{
    Console.WriteLine($"{entry.Key}: {entry.Value}");
}

Queue

`Queue`는 FIFO(First In, First Out) 구조를 따릅니다. 데이터가 먼저 들어간 순서대로 나옵니다.


Queue queue = new Queue();
queue.Enqueue("A");
queue.Enqueue("B");
queue.Enqueue("C");

Console.WriteLine("Queue items:");
while(queue.Count > 0)
{
    Console.WriteLine(queue.Dequeue());
}

Stack

`Stack`는 LIFO(Last In, First Out) 구조를 따릅니다. 가장 나중에 들어간 데이터가 가장 먼저 나옵니다.


Stack stack = new Stack();
stack.Push("A");
stack.Push("B");
stack.Push("C");

Console.WriteLine("Stack items:");
while(stack.Count > 0)
{
    Console.WriteLine(stack.Pop());
}

IEnumerable, ICollection 인터페이스

`IEnumerable`는 컬렉션을 순차적으로 열거할 수 있도록 정의된 인터페이스입니다. 모든 컬렉션은 `IEnumerable`을 구현하고 있어, `foreach`문을 사용할 수 있습니다.


IEnumerable numbers = new List { 1, 2, 3, 4, 5 };
foreach(var number in numbers)
{
    Console.WriteLine(number);
}

`ICollection`은 `IEnumerable`의 상속을 받으며, 컬렉션의 크기, 추가, 삭제 등의 기능을 제공합니다. `List`와 같은 클래스는 `ICollection`을 구현합니다.

제네릭 클래스와 메서드

   제네릭은 타입에 구애받지 않고 데이터를 처리할 수 있는 기능을 제공합니다. 제네릭 클래스와 메서드는 다양한 데이터 타입에 대해 재사용 가능한 코드를 작성할 수 있도록 해줍니다.

제네릭 클래스


public class Box
{
    private T value;

    public Box(T value)
    {
        this.value = value;
    }

    public T GetValue()
    {
        return value;
    }
}

class Program
{
    static void Main()
    {
        Box intBox = new Box(100);
        Box strBox = new Box("Hello World");

        Console.WriteLine(intBox.GetValue());  // 100
        Console.WriteLine(strBox.GetValue());  // Hello World
    }
}

제네릭 메서드


public class Utility
{
    public static T GetFirstElement(T[] array)
    {
        return array[0];
    }
}

class Program
{
    static void Main()
    {
        int[] numbers = { 1, 2, 3, 4, 5 };
        string[] names = { "John", "Alice", "Bob" };

        Console.WriteLine(Utility.GetFirstElement(numbers));  // 1
        Console.WriteLine(Utility.GetFirstElement(names));    // John
    }
}
반응형

'Programming' 카테고리의 다른 글

C# LINQ(Language Integrated Query)  (0) 2025.12.11
C# 델리게이트와 이벤트  (0) 2025.12.10
C# 객체지향 프로그래밍 (OOP)  (0) 2025.12.08
C# 클래스와 객체  (0) 2025.12.07
C# 인터페이스와 추상 클래스  (0) 2025.12.06