DICTIONARY 썸네일형 리스트형 C# Dictionary의 커스텀 키 해싱 전략 구현 Dictionary는 해시 코드와 동등성 비교에 크게 의존합니다. 도메인에 맞는 "같음"을 정의하려면 커스텀 해싱 전략이 필요합니다. 이 글은 IEqualityComparer와 키 타입의 Equals/GetHashCode를 구현해 실용적으로 적용하는 방법을 정리합니다.1. 언제 커스텀 해싱이 필요한가- 문자열 대소문자를 무시(예: SKU, 이메일)하거나 문화권 영향을 피하고 싶을 때- 복합 키(예: (Region, SKU), (X, Y))를 하나의 키로 다룰 때- 부동소수점 좌표처럼 근사 동등성(허용 오차)을 원할 때- 입력 정규화(공백 제거, 숫자만 추출 등)가 필요할 때2. 기본 제공 비교자로 끝나는 경우우선 기본 제공 StringComparer를 고려합니다. 이게 가장 빠르고 안정적입니다.using.. 더보기 C# KeyedCollection<T>로 키 기반 컬렉션 설계 KeyedCollection은 List와 Dictionary의 장점을 결합한 컬렉션입니다. 순서를 유지하면서도 키 기반의 빠른 조회가 가능해 도메인 엔티티(예: SKU, 코드, 이메일 등)로 구성된 목록을 다룰 때 유용합니다.1. KeyedCollection 개요- 아이템을 순서대로 보관하며 인덱스 접근이 가능합니다.- 키로 빠르게 조회할 수 있습니다(내부적으로 일정 개수 이상부터 Dictionary를 사용).- 키는 고유해야 하며, 보통 아이템의 특정 속성을 키로 사용합니다.- GetKeyForItem을 오버라이드해 키를 정의합니다.2. 언제 Dictionary/List 대신 쓰나- List만으로는 중복 방지 및 키 조회가 어렵습니다.- Dictionary는 순서가 의미 있을 때 불편합니다.- Keye.. 더보기 C# 구조적 비교와 EqualityComparer<T> 커스터마이징 컬렉션 키 비교나 동등성 판단에서 참조 동일성 대신 내용(구조)을 비교하면 버그를 크게 줄일 수 있습니다. C#/.NET은 배열, 튜플, 레코드 등에서 구조적 비교를 지원하며, EqualityComparer를 통해 사용자 정의 타입에도 손쉽게 커스터마이징할 수 있습니다.1. 구조적 비교란?구조적 비교는 객체의 참조가 아닌 내부 구성 요소 값을 기준으로 동등성/정렬을 판단하는 방식입니다. 기본 배열 비교는 참조 비교이며, 튜플/레코드/ValueTuple은 기본적으로 구조적 비교를 지원합니다.using System;using System.Collections;var a1 = new[] { 1, 2, 3 };var a2 = new[] { 1, 2, 3 };Console.WriteLine(Equals(a1, a.. 더보기 C# Dictionary와 HashSet 활용 1. Dictionary와 HashSet 개념C#의 Dictionary는 키와 값의 쌍으로 데이터를 관리하는 컬렉션입니다. 반면에 HashSet은 중복 없는 고유한 요소 모음을 제공합니다. 각각 빠른 검색과 중복 제거에 유용합니다.2. 간단한 코드 예제아래 예제는 Dictionary에 학생의 ID와 이름을 저장하고, HashSet으로 등록된 과목을 관리하는 방법을 보여줍니다.using System;using System.Collections.Generic;class Program{ static void Main() { // Dictionary 사용: 학생 ID와 이름 저장 Dictionary students = new Dictionary(); student.. 더보기 이전 1 다음