프로그래밍/C#

C#에서 HashSet을 활용한 고유 데이터 관리의 중요성

shimdh 2025. 8. 26. 13:37
728x90

C#에서 컬렉션은 관련 객체 그룹을 저장, 관리 및 조작할 수 있는 필수적인 데이터 구조입니다. .NET이 제공하는 다양한 컬렉션 유형 중에서 HashSet은 요소의 순서에 상관없이 고유한 요소를 다룰 때 강력한 옵션입니다.

HashSet이란 무엇인가?

HashSet은 고유한 요소를 저장하는 비순서형 컬렉션입니다. 내부적으로 해시 테이블을 사용하여 빠른 조회, 추가 및 제거를 제공합니다. 고유성 속성 덕분에 이미 존재하는 요소를 추가하려고 하면 다시 추가되지 않습니다.

HashSet의 주요 특징

  • 비순서형: 요소들은 정의된 순서를 가지지 않습니다.
  • 고유한 요소: 중복 값이 허용되지 않습니다.
  • 빠른 연산: 항목 추가, 제거 또는 존재 여부 확인의 평균 시간 복잡도는 O(1)입니다.

HashSet을 사용할 때

HashSet을 사용해야 하는 경우:

  • 컬렉션 내에 항목이 존재하는지 빠르게 확인해야 할 때.
  • 항목 간의 고유성을 자동으로 보장하고 싶을 때.
  • 애플리케이션 로직에서 순서가 중요하지 않을 때.
728x90

실용적인 예제

HashSet을 사용하는 것이 유용한 몇 가지 실용적인 시나리오를 살펴보겠습니다:

예제 1: 고유한 사용자 ID 저장

사용자가 고유한 ID로 등록할 수 있는 애플리케이션을 개발한다고 가정해 보세요. HashSet은 중복 사용자 ID가 등록되지 않도록 보장합니다.

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        HashSet<int> userIds = new HashSet<int>();

        // 사용자 ID 추가
        userIds.Add(101);
        userIds.Add(102);

        // 중복 ID 추가 시도
        bool added = userIds.Add(101); // false 반환

        Console.WriteLine("User ID 101 added again? " + added); // 출력: false

        // 모든 고유 사용자 ID 표시
        foreach (var id in userIds)
            Console.WriteLine("Registered User ID: " + id);
    }
}

출력:

User ID 101 added again? False
Registered User ID: 101
Registered User ID: 102

예제 2: 두 집합 간의 공통 요소 찾기

두 목록 간의 공통 항목을 결정하는 것이 유용할 수 있습니다. HashSet을 사용하면 이러한 작업이 그들의 고유한 속성 덕분에 효율적으로 수행됩니다.

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        HashSet<string> setA = new HashSet<string>() { "apple", "banana", "cherry" };
        HashSet<string> setB = new HashSet<string>() { "banana", "kiwi", "mango" };

        // 두 집합 교차
        setA.IntersectWith(setB);

        Console.WriteLine("Common fruits:");

        foreach (var fruit in setA)
            Console.WriteLine(fruit);
    }
}

출력:

Common fruits:
banana

추가 메서드 및 속성

HashSet과 관련된 몇 가지 중요한 메서드와 속성은 다음과 같습니다:

  • Add(T item) - 요소가 존재하지 않으면 추가합니다.
  • Remove(T item) - 지정된 요소를 집합에서 제거합니다.
  • Contains(T item) - 지정된 요소가 집합에 존재하는지 확인합니다.
  • Count - HashSet에 포함된 요소의 수를 가져옵니다.

결론

HashSet을 사용하면 고유성과 빠른 조회 기능이 필요한 컬렉션 작업에서 상당한 이점을 제공합니다. 중복이 존재하지 않도록 보장하거나 데이터 세트 간의 교차점을 빠르게 찾는 작업을 단순화합니다. 이러한 컬렉션이 작동하는 방식을 이해하면 애플리케이션 내에서 더 효율적인 데이터 관리 전략을 통해 개발자로서의 역량을 향상시킬 수 있습니다.

728x90