C# Dictionary는 기본적으로 키의 비교를 위한 Comparer를 제공하지만, 값(Value)에 대한 비교도 커스터마이징이 필요한 경우가 있습니다. 이 글에서는 Dictionary의 Value 비교를 직접 제어하는 방법과 커스텀 ValueComparer 구현법을 소개합니다.
1. ValueComparer란?
ValueComparer는 Dictionary에서 값 비교를 사용자 정의할 수 있게 해주는 기능입니다. 기본적으로 Dictionary는 키를 기준으로 동등성을 판단하지만, 값 비교 로직을 바꾸고자 할 때 활용할 수 있습니다.
2. Dictionary에서 기본 Comparer 사용법
Dictionary 생성 시에 키에 대한 Comparer는 쉽게 지정할 수 있습니다. 그러나 값 비교를 직접 지정할 수 있는 API는 없으므로, ValueComparer를 직접 작성하여 활용해야 합니다.
3. ValueComparer 커스터마이징 예제
아래 예제는 ValueComparer를 커스터마이징하여 Dictionary의 값 비교 방식을 바꾸는 방법입니다. 예로서 대소문자 구분 없이 문자열 값을 비교합니다.
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
class Program
{
static void Main()
{
// 대소문자 구분 없이 값을 비교하는 ValueComparer 생성
var valueComparer = new ValueComparer(
(v1, v2) => string.Equals(v1, v2, StringComparison.OrdinalIgnoreCase),
v => v.ToLowerInvariant().GetHashCode(),
v => v
);
// ImmutableDictionary 생성 시 ValueComparer 적용(예시)
var dict = ImmutableDictionary.Create(valueComparer).Add("Key", "Value");
Console.WriteLine(dict.ContainsValue("value")); // True
}
}
위 예제는 ValueComparer<T>를 통해 값 비교 기준을 명확하게 정의하고, ImmutableDictionary와 같은 컬렉션에 적용한 예입니다. 일반 Dictionary에서는 ValueComparer 직접 지정 기능이 제한적이므로, 값 비교가 필요한 경우 별도의 로직으로 처리해야 합니다.
4. 정리
C#에서 Dictionary는 기본적으로 키 비교에 집중합니다. 값(Value) 비교를 커스터마이징하려면 ValueComparer를 활용하거나 별도의 비교 로직을 구현하는 방식을 선택해야 합니다. 특히 Immutable 컬렉션에서는 ValueComparer 지원이 강력하니 필요에 맞게 사용해보시기 바랍니다.
'C#' 카테고리의 다른 글
| C# DateTime.ParseExact와 TryParseExact 활용 (0) | 2026.07.08 |
|---|---|
| C# 플래그 Enum과 비트 필드 활용 패턴 (0) | 2026.07.08 |
| C# IDisposable 구현 시 Finalizer와의 상호작용 (0) | 2026.07.07 |
| C# Expression Tree로 동적 LINQ 쿼리 빌드하기 (1) | 2026.07.07 |
| C# HttpClient에서 다중 요청 병렬 처리 구현 (0) | 2026.07.07 |