필자가 가장 유용하게
사용하는 개체 중 하나는 Collection개체입니다. 비록 이것이
느리다는 단점과 많치 않는 property(속성)와 method(방법)를 제공하지만 배열보다 편리합니다.
물론 따로
List형 자료구조 클래스를 사용할 수도 있지만, 임시로 간단한 자료구조만 필요하고 빠른 처리를 요구하지
않는 작업이 대부분이라 애용하는 편입니다.
Collection개체에 데이터를 추가하는 경우 사용하는 method가
Add입니다. Add 메소드의 매개변수로는 Item, Key, Before, After입니다.
Item은 실제 입력되는 데이터이고, Key는 앞서의 Item과
연결되어 Item을 검색할 수 있는 말 그대로 key입니다. 그래서 이것은 key이므로 당연히 다른
Item의 Key와 중복될 수 없습니다.(key라고 하면 중복될 수 없다는 의미를 내포합니다)
Collection에 저장된 내용을 가져오려면 Item메소드에 Item의 index값을 주거나 key값을
주면 됩니다.
보통
Add 메소드시 Item과 Key를 다르게 사용하지만 중복되지 않는 목록을 만들기 위해서는 Item을
Key로 사용합니다. 따라서 중복된 Item과 중복된 Key를 입력하게 됩니다. 그러나 Key값이
중복되면 해당 Item은 입력되지 않습니다. 그리고 457번 에러,
“이
키는 이 컬렉션의 한 요소와 이미 연결되어 있습니다”라는
에러메시지를 보여 줍니다.
중복되지 않는 목록을 가지고
싶은 경우 Key의 이러한 성질을 이용하는 것입니다. 다만 에러가
발생해도 다음 문장을 계속 실행하도록
"On
Error Resume Next"를
붙여 주어야 합니다.
다음은 지금까지 설명한
내용을 코드로 옮긴 것입니다.
Sub CollectionDemo()
Dim Teletubies As New
Collection
Dim arrData
Dim i As Long
'// 에러가 나도 무시하고 다음 문장을 실행하도록 만든다.
On Error Resume Next
'// 일부 중복된 항목을 가진 배열을 만든다.
arrData = Array("보라돌이", "뽀", "보라돌이", "뽀", "라나", "뚜비")
'// 배열의 각 원소를 Collection개체에 추가한다.
For i = LBound(arrData) To UBound(arrData)
'// Item과 Key를 동일한 값으로 Add합니다.
Teletubies.Add arrData(i), arrData(i)
Next
On Error GoTo 0
'// 중복되지 않는 목록을 보여줄 것이다.
For i = 1 To Teletubies.Count
Debug.Print Teletubies.Item(i)
Next
End Sub |