다음을 통해 공유


제네릭 소개(C# 프로그래밍 가이드)

제네릭 클래스 및 메서드를 사용하면 제네릭이 아닌 형식에서는 불가능한 방식으로 재사용성, 형식 안전성 및 효율성을 동시에 달성할 수 있습니다.제네릭은 컬렉션 및 컬렉션을 다루는 메서드에서 가장 자주 사용됩니다..NET Framework 클래스 라이브러리 버전 2.0에서는 System.Collections.Generic이라는 새로운 네임스페이스를 제공하며, 이 네임스페이스에는 새로운 제네릭 기반 컬렉션 클래스가 여러 개 있습니다..NET Framework 2.0 이상을 대상으로 하는 모든 응용 프로그램에서는 이전의 ArrayList 같은 제네릭이 아닌 형식 대신 새로운 제네릭 컬렉션 클래스를 사용하는 것이 좋습니다.자세한 내용은 .NET Framework 클래스 라이브러리의 제네릭(C# 프로그래밍 가이드)를 참조하십시오.

물론 사용자 고유의 형식이 안전하고 효율적인 일반화 솔루션 및 디자인 패턴을 제공하기 위해 사용자 지정 제네릭 형식 및 메서드를 만들 수도 있습니다.다음 코드 예제에서는 이해를 돕기 위해 간단한 제네릭 연결 리스트 클래스를 보여 줍니다.대부분의 경우에는 사용자가 이러한 클래스를 직접 만드는 대신 .NET Framework 클래스 라이브러리에서 제공하는 List<T> 클래스를 사용해야 합니다. 목록에 저장되는 항목의 형식을 지정하기 위해 일반적으로는 구체적인 형식이 사용될 여러 위치에 형식 매개 변수 T가 사용되고 있습니다.구체적으로는 다음과 같이 사용되고 있습니다.

  • AddHead 메서드의 메서드 매개 변수 형식

  • 공용 메서드인 GetNext의 반환 형식 및 중첩 Node 클래스의 Data 속성

  • 중첩 클래스에 있는 전용 멤버 데이터의 형식

중첩 Node 클래스에서도 T를 사용할 수 있습니다.GenericList<int>와 같이 GenericList<T>를 구체적 형식을 사용하여 인스턴스화하면 모든 T가 int로 대체됩니다.

// type parameter T in angle brackets
public class GenericList<T> 
{
    // The nested class is also generic on T.
    private class Node
    {
        // T used in non-generic constructor.
        public Node(T t)
        {
            next = null;
            data = t;
        }

        private Node next;
        public Node Next
        {
            get { return next; }
            set { next = value; }
        }

        // T as private member data type.
        private T data;

        // T as return type of property.
        public T Data  
        {
            get { return data; }
            set { data = value; }
        }
    }

    private Node head;

    // constructor
    public GenericList() 
    {
        head = null;
    }

    // T as method parameter type:
    public void AddHead(T t) 
    {
        Node n = new Node(t);
        n.Next = head;
        head = n;
    }

    public IEnumerator<T> GetEnumerator()
    {
        Node current = head;

        while (current != null)
        {
            yield return current.Data;
            current = current.Next;
        }
    }
}

다음 코드 예제에서는 클라이언트 코드에서 제네릭 GenericList<T> 클래스를 사용하여 정수 목록을 만드는 방법을 보여 줍니다.형식 매개 변수를 변경하는 간단한 방법으로 다음 코드를 문자열이나 기타 사용자 지정 형식의 목록을 만들도록 쉽게 변경할 수 있습니다.

class TestGenericList
{
    static void Main()
    {
        // int is the type argument
        GenericList<int> list = new GenericList<int>();

        for (int x = 0; x < 10; x++)
        {
            list.AddHead(x);
        }

        foreach (int i in list)
        {
            System.Console.Write(i + " ");
        }
        System.Console.WriteLine("\nDone");
    }
}

참고 항목

참조

제네릭(C# 프로그래밍 가이드)

System.Collections.Generic

개념

C# 프로그래밍 가이드