프로그래밍백엔드 개발자 (비주얼 베이식)

비주얼 베이식에서 사전(Dictionary(Of TKey, TValue))을 어떻게 구현하고 어떤 작업이 가능하며, 존재하지 않는 키로 값을 가져올 때 어떤 함정이 있나요?

Hintsage AI 어시스턴트로 면접 통과

답변.

질문 배경

.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

주요 특징:

  • 키에 대한 빠른 접근 (해싱)
  • 키 존재 여부에 대한 명시적 검사가 오류를 예방함
  • 키에 따라 값 삭제 및 교체는 Remove 및 인덱서를 통해 구현됨

주의가 필요한 질문.

dict("키")가 항상 새로운 키-값 쌍을 추가한다는 것이 사실인가요?

아니요. 키가 존재하면 값이 업데이트되고, 존재하지 않으면 쌍이 추가됩니다. 키가 존재할 경우 오류를 발생시키고 싶다면 Add를 사용하세요.

TryGetValue가 존재하지 않는 키에 대해 예외를 발생시키나요?

아니요. 이는 False를 반환하고 예외를 발생시키지 않으며, value를 변경하지 않습니다. 안전한 접근 방법입니다.

Dictionary에서 값형(예: Integer) 타입을 TValue로 저장하고, 존재하지 않는 키에 대해 null을 반환할 수 있나요?

아니요. 값형에 대해서는 기본값(정수의 경우 0)을 반환하지만, 여전히 존재하지 않는 키에 접근할 경우 인덱서를 통해 예외가 발생합니다.

일반적인 실수와 안티 패턴

  • 검증 없이 인덱서를 통해 존재하지 않는 키에 접근
  • Add를 통해 키 중복 발생 (ArgumentException 발생)
  • TryGetValue 반환값 무시

실생활 예시

부정적인 케이스

사전을 인덱스로 접근하기 전에 검증하지 않는 경우가 여러 곳에 중복되어 존재해 주기적으로 프로그램이 다운됩니다.

장점:

  • 코드가 간결해짐

단점:

  • 애플리케이션이 불안정하고 오류를 잡기 어려움

긍정적인 케이스

TryGetValue를 널리 사용하여 모든 접근이 보호되고, 키가 없을 경우가 논리적으로 처리됩니다.

장점:

  • 안정적인 동작, 예외가 없음

단점:

  • 값을 위한 out 변수를 만들어야 함