질문 배경
.NET Framework의 등장으로 비주얼 베이식은 키-값 쌍을 안전하고 빠르게 저장할 수 있는 구조인 Dictionary(Of TKey, TValue)를 얻게 되었습니다. 이는 빠른 검색을 위한 표준 연관 컨테이너입니다.
문제
사전 작업은 종종 오류를 일으킬 수 있습니다: 존재하지 않는 키로 값을 접근하려고 하면 예외가 발생합니다. 또한, 값 추가, 수정 및 새 값 추가 작업이 혼동될 수 있습니다.
해결책
값에 접근하기 위해 인덱서를 사용하거나 TryGetValue, ContainsKey 메서드를 사용합니다. KeyNotFoundException 예외를 피하기 위해서는 항상 명시적인 검사를 수행하세요:
코드 예:
Dim dict As New Dictionary(Of String, Integer)() dict.Add("one", 1) dict("two") = 2 ' 새 쌍 추가 If dict.ContainsKey("three") Then Console.WriteLine(dict("three")) ' 오류를 발생시키지 않음 Else Console.WriteLine("키를 찾을 수 없음") End If Dim value As Integer = 0 If dict.TryGetValue("one", value) Then Console.WriteLine(value) End If
주요 특징:
dict("키")가 항상 새로운 키-값 쌍을 추가한다는 것이 사실인가요?
아니요. 키가 존재하면 값이 업데이트되고, 존재하지 않으면 쌍이 추가됩니다. 키가 존재할 경우 오류를 발생시키고 싶다면 Add를 사용하세요.
TryGetValue가 존재하지 않는 키에 대해 예외를 발생시키나요?
아니요. 이는 False를 반환하고 예외를 발생시키지 않으며, value를 변경하지 않습니다. 안전한 접근 방법입니다.
Dictionary에서 값형(예: Integer) 타입을 TValue로 저장하고, 존재하지 않는 키에 대해 null을 반환할 수 있나요?
아니요. 값형에 대해서는 기본값(정수의 경우 0)을 반환하지만, 여전히 존재하지 않는 키에 접근할 경우 인덱서를 통해 예외가 발생합니다.
사전을 인덱스로 접근하기 전에 검증하지 않는 경우가 여러 곳에 중복되어 존재해 주기적으로 프로그램이 다운됩니다.
장점:
단점:
TryGetValue를 널리 사용하여 모든 접근이 보호되고, 키가 없을 경우가 논리적으로 처리됩니다.
장점:
단점: