다음을 통해 공유


컬렉션 문제 해결

업데이트: 2007년 11월

이 페이지에는 컬렉션을 사용할 때 발생할 수 있는 일반적인 문제가 나열되어 있습니다.

잘못된 형식의 컬렉션 사용

Visual Basic 개발자는 Visual Basic Collection 클래스, .NET Framework에서 제공하는 컬렉션 클래스 등 여러 형식의 컬렉션을 사용할 수 있습니다. 이러한 클래스는 서로 호환되지 않습니다. 즉, 변수를 한 형식의 컬렉션으로 선언하면 다른 형식의 개체를 해당 변수에 지정할 수 없습니다. 또한 사용자가 선언한 컬렉션 형식의 메서드와 속성에만 액세스할 수 있습니다.

Visual Basic 컬렉션 클래스와 .NET Framework 컬렉션 클래스의 주요 차이점은 다음과 같습니다.

  • 인덱스 기준..NET Framework 컬렉션은 0부터 시작하지만 Visual Basic 컬렉션은 1부터 시작합니다. 즉, Visual Basic 컬렉션의 요소에는 1부터 Count 속성(Collection 개체) 값까지의 인덱스 값이 있지만 .NET Framework 컬렉션의 요소는 0부터 컬렉션의 Count 속성 값보다 1 작은 값까지의 인덱스 값이 있습니다.

  • **요소 형식.**Visual Basic 컬렉션에서는 Object 형식의 요소를 지원합니다. 사용자가 어떤 데이터 형식의 요소도 추가할 수 있기 때문에 이는 형식이 안전하지 않은 컬렉션입니다. 이 경우 일반적으로 컴파일러에서 요소를 boxing 및 unboxing하여 Object 데이터 형식 간에 변환해야 하므로 성능이 저하됩니다. 일부 .NET Framework 컬렉션에도 Object 형식의 요소가 있지만 대부분의 컬렉션은 강력한 형식입니다. 즉, 대부분의 컬렉션에서는 형식 안전 컬렉션을 만들고 일반적으로 최적의 성능을 제공하는 특정 형식의 요소를 지원합니다.

  • **키 요소.**Visual Basic 컬렉션에 요소를 추가할 때 키를 지정할 수 있습니다. 키는 나중에 해당 요소에 액세스하는 데 사용할 수 있는 고유한 String 값입니다. .NET Framework 컬렉션의 일부는 키를 지원하고 일부는 지원하지 않습니다.

여러 컬렉션 클래스 정의를 포함하는 네임스페이스는 다음과 같습니다.

  • Microsoft.VisualBasic - Visual BasicCollection 클래스

  • System.Collections - 목록, 큐, 비트 배열, 해시 테이블, 사전 등의 특정 컬렉션 클래스

  • System.Collections.Generic - 강력한 형식의 컬렉션을 만들고 해당 컬렉션을 만들 때 요소 데이터 형식을 지정할 수 있는 제네릭 컬렉션 클래스

  • System.Collections.Specialized - 링크된 목록 및 혼합형 사전, 비트 벡터 및 이름 개체 컬렉션, 문자열 전용 컬렉션 등의 특수화되고 강력한 형식이 지정된 컬렉션 클래스

해결 방법

사용자 요구 사항에 가장 적합한 컬렉션 형식을 결정합니다. 결정한 형식으로 컬렉션 변수를 선언하고 같은 형식의 개체를 만들어야 합니다. 정규화를 사용하여 사용자가 의도한 컬렉션을 지정하고 있는지 확인합니다. 다음 예제에서는 정규화를 사용한 두 개의 선언을 보여 줍니다.

Dim customers As New Microsoft.VisualBasic.Collection()
Dim stringQueue As New System.Collections.Generic.Queue(Of String)

특정 형식의 컬렉션을 만든 후에는 해당 형식에 정의된 메서드와 속성만 사용해야 합니다. 컴파일 시 잘못된 개체 할당 또는 멤버 액세스를 찾아내도록 Option Strict On을 설정합니다.

참고 항목

개념

Visual Basic의 컬렉션

Visual Basic 컬렉션 클래스

참조

Option Strict 문