컬렉션은 그룹화된 유사한 형식의 개체 집합입니다.
모든 형식의 개체는 Object 형식의 단일 컬렉션으로 그룹화하여 해당 언어에 고유한 구문을 활용할 수 있습니다. 예를 들어, C# foreach 문(Visual Basic의 경우 for each)에서는 컬렉션의 모든 개체가 단일 형식이어야 합니다.
하지만, Object 형식 컬렉션에서는 boxing/unboxing 또는 변환과 같이 컬렉션의 성능에 영향을 미치는 추가 프로세스가 개별 요소에 대해 수행됩니다. boxing 및 unboxing은 보통 Object 형식 컬렉션에서 값 형식을 정렬하거나 검색할 때 발생합니다.
요소의 형식이 StringCollection에서 문자열 정렬 또는 검색 등 컬렉션이 의도한 형식인 경우 List<T>과 같은 제네릭 컬렉션과 StringCollection과 같은 제네릭이 아닌 강력한 형식의 컬렉션은 이러한 성능 저하를 피할 수 있습니다. 또한, 강력한 형식의 컬렉션은 컬렉션에 추가된 각 요소의 형식 확인을 자동으로 수행합니다. 이러한 이유 때문에 가능하면 제네릭 컬렉션 클래스를 사용하는 것이 좋습니다.
ICollection 인터페이스 또는 ICollection<T> 제네릭 인터페이스를 직접 또는 간접적으로 구현하는 모든 컬렉션은 요소를 추가, 제거 또는 검색하는 메서드 이외에 다음과 같은 여러 가지 기능을 공유합니다.
열거자.
열거자는 연결된 컬렉션 사이를 이동하는 개체입니다. 이것은 컬렉션의 어떤 요소로도 이동이 가능한 포인터로 생각할 수 있습니다. 열거자는 오직 하나의 컬렉션과 연결될 수 있지만, 컬렉션은 여러 열거자를 가질 수 있습니다. C# foreach 문(Visual Basic의 경우 for each)은 열거자를 사용하고 열거자 조작을 단순화합니다.
동기화 멤버(System.Collections 클래스에만 해당).
동기화는 컬렉션의 요소에 액세스할 때 System.Collections 네임스페이스의 레거시 컬렉션 형식에 대해 일정 수준의 스레드 보안을 제공합니다. 컬렉션은 기본적으로 스레드로부터 안전하지 않습니다. 컬렉션에 대한 확장 가능하고 효율적인 다중 스레드 액세스가 필요할 경우 System.Collections.Concurrent 네임스페이스의 클래스 중 하나를 사용합니다. 자세한 내용은 스레드로부터 안전한 컬렉션을 참조하십시오.
System.Collections 네임스페이스의 일부 클래스만 컬렉션에 대해 스레드로부터 안전한 래퍼를 만드는 Synchronize 메서드를 제공합니다. 그러나 System.Collections 네임스페이스의 모든 클래스는 파생된 클래스에서 사용할 수 있는 SyncRoot 속성을 제공하여 스레드로부터 안전한 래퍼를 직접 만들 수 있습니다. 컬렉션이 스레드로부터 안전한지 여부를 결정하기 위한 IsSynchronized 속성도 제공됩니다. ICollection<T> 제네릭 인터페이스에서는 동기화를 사용할 수 없습니다.
CopyTo 메서드
모든 컬렉션은 CopyTo 메서드를 사용하여 배열로 복사할 수 있지만 새로운 배열의 요소 순서는 열거자가 요소를 반환하는 시퀀스를 기준으로 합니다. 결과적으로 생기는 배열은 항상 하한이 0인 1차원 배열이 됩니다.
ICollection<T> 제네릭 인터페이스에는 제네릭이 아닌 인터페이스에 포함되어 있지 않은 추가 멤버가 있습니다.
다음과 같은 기능이 System.Collections 네임스페이스의 일부 클래스에서 구현됩니다.
용량 및 개수.
컬렉션의 용량은 수용 가능한 요소의 수입니다. 컬렉션의 카운트는 실제로 포함되어 있는 요소의 수입니다. BitArray는 특별한 경우로, 이 컬렉션의 용량은 해당 길이와 동일하며 길이는 컬렉션 카운트와 동일합니다. 일부 컬렉션은 용량이나 카운트 또는 이 둘을 숨깁니다.
모든 컬렉션은 현재 용량에 도달할 경우 자동으로 용량이 확장됩니다. 메모리는 다시 할당되고 요소는 기존의 컬렉션에서 새로운 컬렉션으로 복사됩니다. 이 경우 컬렉션을 사용하기 위해 필요한 코드가 줄어들지만, 컬렉션의 성능은 저하될 수 있습니다. 다중 재할당에 의해 발생하는 성능 저하를 막을 수 있는 최선의 방법은 초기 용량을 적절한 크기로 설정하는 것입니다.
하한.
컬렉션의 하한은 첫 번째 요소의 인덱스입니다. System.Collections 네임스페이스에 있는 모든 인덱싱된 컬렉션의 하한은 0입니다. Array의 기본 하한 값은 0이지만, CreateInstance를 사용하여 Array 클래스의 인스턴스를 만들 때 하한을 다르게 정의할 수 있습니다.
System.Collections 클래스는 일반적으로 다음 세 가지 형식으로 분류됩니다.
일반적으로 사용되는 컬렉션.
해시 테이블, 쿼리, 스택, 사전 및 목록과 같은 일반적인 데이터 컬렉션입니다. 널리 사용되는 여러 컬렉션의 경우 제네릭이 아닌 버전, 제네릭 버전 및 스레드로부터 안전한 제네릭 버전이 있습니다.
비트 컬렉션.
컬렉션 요소가 비트 플래그인 컬렉션입니다. 다른 컬렉션과는 약간 다르게 동작합니다.
특수 컬렉션.
StringDictionary와 같이 대게 특정 형식의 요소를 처리하기 위해 특별한 목적을 가진 컬렉션입니다.
컬렉션 클래스는 주의하여 선택하십시오. 각 컬렉션은 자신만의 기능을 가지고 있기 때문에 고유한 제한 사항도 있습니다. 컬렉션이 더 특수할수록 제한도 많아집니다. 컬렉션 선택에 대한 자세한 내용은 Collection 클래스 선택을 참조하십시오.
참고 항목
참조
System.Collections.Specialized