컬렉션 이니셜라이저 개요(Visual Basic)
컬렉션 이니셜라이저에서는 컬렉션을 만들고 초기 값 집합으로 채울 수 있는 약식 구문을 제공합니다. 컬렉션 이니셜라이저는 메뉴 옵션 또는 범주 목록, 초기 숫자 값 집합, 정적 문자열 목록(예: 일 또는 월 이름), 지리적 위치(예: 유효성 검사에 사용되는 상태 목록) 등과 같은 알려진 값 집합에서 컬렉션을 만드는 경우에 유용합니다.
컬렉션 이니셜라이저는 From 키워드 다음에 중괄호({})를 사용하여 식별합니다. 이는 Visual Basic의 배열에서 설명한 배열 리터럴 구문과 비슷합니다. 다음 예제에서는 컬렉션 이니셜라이저를 사용하여 컬렉션을 만드는 여러 가지 방법을 보여 줍니다.
' Create an array of type String().
Dim winterMonths = {"December", "January", "February"}
' Create an array of type Integer()
Dim numbers = {1, 2, 3, 4, 5}
' Create a list of menu options. (Requires an extension method
' named Add for List(Of MenuOption)
Dim menuOptions = New List(Of MenuOption) From {{1, "Home"},
{2, "Products"},
{3, "News"},
{4, "Contact Us"}}
참고
C#에서도 컬렉션 이니셜라이저가 제공됩니다. C# 컬렉션 이니셜라이저는 Visual Basic 컬렉션 이니셜라이저와 동일한 기능을 제공합니다. C# 컬렉션 이니셜라이저에 대한 자세한 내용은 개체 및 컬렉션 이니셜라이저(C# 프로그래밍 가이드)를 참조하십시오.
구문
컬렉션 이니셜라이저는 다음 코드와 같이 From 키워드 다음에 쉼표로 구분되고 중괄호({})로 묶인 값 목록으로 구성됩니다.
Dim names As New List(Of String) From {"Christa", "Brian", "Tim"}
List<T> 또는 Dictionary<TKey, TValue>와 같은 컬렉션을 만들 경우에는 다음 코드에서와 같이 컬렉션 이니셜라이저 앞에 컬렉션 형식을 제공해야 합니다.
Public Class AppMenu
Public Property Items As List(Of String) =
New List(Of String) From {"Home", "About", "Contact"}
End Class
참고
같은 컬렉션 개체를 초기화하기 위해 컬렉션 이니셜라이저와 개체 이니셜라이저를 결합할 수 없습니다. 개체 이니셜라이저를 사용하여 컬렉션 이니셜라이저의 개체를 초기화할 수 있습니다.
컬렉션 이니셜라이저를 사용하여 컬렉션 만들기
컬렉션 이니셜라이저를 사용하여 컬렉션을 만들 경우 컬렉션 이니셜라이저에 제공된 각 값은 컬렉션의 해당 Add 메서드로 전달됩니다. 예를 들어, 컬렉션 이니셜라이저를 사용하여 List<T>을 만들 경우 컬렉션 이니셜라이저의 각 문자열 값은 Add 메서드로 전달됩니다. 컬렉션 이니셜라이저를 사용하여 컬렉션을 만들 경우에는 지정한 형식이 유효한 컬렉션 형식이어야 합니다. 유효한 컬렉션 형식의 예로는 IEnumerable<T> 인터페이스를 구현하거나 CollectionBase 클래스를 상속한 클래스가 있습니다. 지정된 형식은 또한 다음 조건을 충족하는 Add 메서드를 노출해야 합니다.
Add 메서드는 컬렉션 이니셜라이저가 호출되는 범위에서 사용할 수 있어야 합니다. 컬렉션의 public이 아닌 메서드에 액세스할 수 있는 시나리오에서 컬렉션 이니셜라이저를 사용할 경우에는 Add 메서드가 public이 아니어도 됩니다.
Add 메서드는 컬렉션 클래스의 인스턴스 멤버 또는 Shared 멤버이거나 확장 메서드여야 합니다.
오버로드 확인 규칙에 따라 컬렉션 이니셜라이저에서 제공되는 형식과 일치할 수 있도록 Add 메서드가 존재해야 합니다.
예를 들어, 다음 코드 예제에서는 컬렉션 이니셜라이저를 사용하여 List(Of Customer) 컬렉션을 만드는 방법을 보여 줍니다. 코드를 실행하면 각 Customer 개체가 제네릭 목록의 Add(Customer) 메서드로 전달됩니다.
Dim customers = New List(Of Customer) From
{
New Customer("City Power & Light", "http://www.cpandl.com/"),
New Customer("Wide World Importers", "http://www.wideworldimporters.com/"),
New Customer("Lucerne Publishing", "http://www.lucernepublishing.com/")
}
다음 코드 예제에서는 컬렉션 이니셜라이저를 사용하지 않으면서 동일한 기능을 제공하는 코드를 보여 줍니다.
Dim customers = New List(Of Customer)
customers.Add(New Customer("City Power & Light", "http://www.cpandl.com/"))
customers.Add(New Customer("Wide World Importers", "http://www.wideworldimporters.com/"))
customers.Add(New Customer("Lucerne Publishing", "http://www.lucernepublishing.com/"))
컬렉션의 Add 메서드에 Customer 개체의 생성자와 일치하는 매개 변수가 있는 경우 컬렉션 이니셜라이저 내에서 Add 메서드의 매개 변수 값을 중첩시킬 수 있습니다. 이에 대한 설명은 다음 단원에서 제공합니다. 컬렉션에 이와 같은 Add 메서드가 없는 경우 이 메서드를 확장 메서드로 만들 수 있습니다. Add 메서드를 컬렉션의 확장 메서드로 만드는 방법의 예제를 보려면 방법: 컬렉션 이니셜라이저에 사용되는 확장 추가 메서드 만들기(Visual Basic)를 참조하십시오. 컬렉션 이니셜라이저와 함께 사용할 수 있는 사용자 지정 컬렉션을 만드는 방법의 예제를 보려면 방법: 컬렉션 이니셜라이저에 사용되는 컬렉션 만들기(Visual Basic)를 참조하십시오.
컬렉션 이니셜라이저 중첩
만들고 있는 컬렉션에 대한 Add 메서드의 특정 오버로드를 식별하기 위해 컬렉션 이니셜라이저 내에서 값을 중첩시킬 수 있습니다. Add 메서드로 전달되는 값은 배열 리터럴이나 컬렉션 이니셜라이저에서와 같이 쉼표로 구분하고 중괄호({})로 묶어야 합니다.
중첩된 값을 사용하여 컬렉션을 만들 경우 중첩된 값 목록의 각 요소는 해당 요소 형식과 일치하는 Add 메서드에 대한 인수로 전달됩니다. 예를 들어, 다음 코드 예제에서는 키 형식이 Integer이고 값 형식이 String인 Dictionary<TKey, TValue>를 만듭니다. 각각의 중첩된 값 목록은 Dictionary의 Add 메서드와 일치합니다.
Dim days = New Dictionary(Of Integer, String) From
{{0, "Sunday"}, {1, "Monday"}}
이전 코드 예제는 다음 코드와 동일합니다.
Dim days = New Dictionary(Of Integer, String)
days.Add(0, "Sunday")
days.Add(1, "Monday")
첫 번째 중첩 수준의 중첩된 값 목록만 컬렉션 형식의 Add 메서드에 전달됩니다. 보다 깊은 중첩 수준은 배열 리터럴로 간주되기 때문에 중첩된 값 목록이 컬렉션의 Add 메서드와 일치하지 않습니다.
참고 항목
작업
방법: 컬렉션 이니셜라이저에 사용되는 확장 추가 메서드 만들기(Visual Basic)
방법: 컬렉션 이니셜라이저에 사용되는 컬렉션 만들기(Visual Basic)