제네릭 컬렉션 사용 기준When to Use Generic Collections

제네릭 컬렉션을 사용하면 기본 컬렉션 형식에서 파생하고 형식별 멤버를 구현하지 않아도 형식 보안 이점이 즉시 제공되므로 일반적으로는 제네릭 컬렉션을 사용하는 것이 좋습니다.Using generic collections is generally recommended, because you gain the immediate benefit of type safety without having to derive from a base collection type and implement type-specific members. 또한 컬렉션 요소가 값 형식일 때는 대개 제네릭 컬렉션 형식이 해당하는 제네릭이 아닌 컬렉션 형식 및 제네릭이 아닌 기본 컬렉션 형식에서 파행되는 형식에 비해 성능도 뛰어납니다. 제네릭을 사용하는 경우에는 요소를 boxing할 필요가 없기 때문입니다.Generic collection types also generally perform better than the corresponding nongeneric collection types (and better than types that are derived from nongeneric base collection types) when the collection elements are value types, because with generics there is no need to box the elements.

.NET Framework 4.NET Framework 4 이상을 대상으로 하는 프로그램의 경우에는 여러 스레드가 컬렉션에서 동시에 항목을 추가하거나 제거하는 경우 System.Collections.Concurrent 네임스페이스에서 제네릭 컬렉션 클래스를 사용해야 합니다.For programs that target the .NET Framework 4.NET Framework 4 or later, you should use the generic collection classes in the System.Collections.Concurrent namespace when multiple threads might be adding or removing items from the collection concurrently.

기존 컬렉션 형식에 해당하는 제네릭 형식은 다음과 같습니다.The following generic types correspond to existing collection types:

추가 형식Additional Types

다수의 제네릭 컬렉션 형식에는 그에 해당하는 제네릭이 아닌 형식이 없습니다.Several generic collection types do not have nongeneric counterparts. 이러한 형식은 다음과 같습니다.They include the following:

LINQ to ObjectsLINQ to Objects

LINQ to Objects 기능을 사용하면 개체 형식이 System.Collections.IEnumerable 또는 System.Collections.Generic.IEnumerable<T> 인터페이스를 구현하는 경우 LINQ 쿼리를 통해 메모리 내 개체에 액세스할 수 있습니다.The LINQ to Objects feature enables you to use LINQ queries to access in-memory objects as long as the object type implements the System.Collections.IEnumerable or System.Collections.Generic.IEnumerable<T> interface. LINQ 쿼리는 데이터 액세스를 위한 일반 패턴을 제공하고, 표준 foreach 루프에 비해 간결하고 쉽게 읽을 수 있으며, 필터링, 순서 지정 및 그룹화 기능을 제공합니다.LINQ queries provide a common pattern for accessing data; are typically more concise and readable than standard foreach loops; and provide filtering, ordering and grouping capabilities. 또한 LINQ 쿼리를 통해 성능을 향상시킬 수도 있습니다.LINQ queries can also improve performance. 자세한 내용은 LINQ to ObjectsParallel LINQ (PLINQ)를 참조하세요.For more information, see LINQ to Objects and Parallel LINQ (PLINQ).

추가 기능Additional Functionality

일부 제네릭 형식은 제네릭이 아닌 컬렉션 형식에는 없는 기능을 포함합니다.Some of the generic types have functionality that is not found in the nongeneric collection types. 예를 들어 제네릭이 아닌 List<T> 클래스에 해당하는 ArrayList 클래스에는 제네릭 대리자를 허용하는 여러 메서드가 포함되어 있습니다. 이러한 대리자로는 목록 검색을 위한 메서드를 지정할 수 있도록 하는 Predicate<T> 대리자, 목록의 각 요소에 대해 작동하는 메서드를 나타내는 Action<T> 대리자, 형식 간의 변환을 정의할 수 있도록 하는 Converter<TInput,TOutput> 대리자 등이 있습니다.For example, the List<T> class, which corresponds to the nongeneric ArrayList class, has a number of methods that accept generic delegates, such as the Predicate<T> delegate that allows you to specify methods for searching the list, the Action<T> delegate that represents methods that act on each element of the list, and the Converter<TInput,TOutput> delegate that lets you define conversions between types.

List<T> 클래스를 사용하면 목록 검색 및 정렬을 위해 IComparer<T> 제네릭 인터페이스 구현을 직접 지정할 수 있습니다.The List<T> class allows you to specify your own IComparer<T> generic interface implementations for sorting and searching the list. SortedDictionary<TKey,TValue>SortedList<TKey,TValue> 클래스에도 이 기능이 있습니다.The SortedDictionary<TKey,TValue> and SortedList<TKey,TValue> classes also have this capability. 또한 이러한 클래스를 사용하는 경우 컬렉션을 만들 때 비교자를 지정할 수 있습니다.In addition, these classes let you specify comparers when the collection is created. 마찬가지로 Dictionary<TKey,TValue>KeyedCollection<TKey,TItem> 클래스에서도 고유한 같음 비교자를 지정할 수 있습니다.In similar fashion, the Dictionary<TKey,TValue> and KeyedCollection<TKey,TItem> classes let you specify your own equality comparers.

참고 항목See Also

컬렉션 및 데이터 구조Collections and Data Structures
일반적으로 사용되는 컬렉션 형식Commonly Used Collection Types
제네릭Generics