Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# IStructuralComparable 인터페이스 완벽 가이드: 컬렉션의 구조적 비교 방법

IStructuralComparable 인터페이스란?

IStructuralComparable 인터페이스는 C#에서 컬렉션 객체 간의 구조적 비교(structural comparison)를 지원하는 인터페이스입니다. 여기서 구조적 비교란 단순히 객체의 참조를 비교하는 것이 아니라, 배열이나 튜플 같은 컬렉션이 담고 있는 개별 요소들을 하나씩 비교하여 두 컬렉션이 동일한지 판단하는 것을 의미합니다.

이 인터페이스는 .NET Framework 4에서 처음 도입되었으며, 다음과 같이 선언되어 있습니다.

public interface IStructuralComparable

주요 메서드: CompareTo(Object, IComparer)

IStructuralComparable 인터페이스는 단 하나의 메서드만을 정의합니다.

  • CompareTo(Object, IComparer) — 현재 컬렉션 객체가 정렬 순서상 다른 객체보다 앞에 오는지, 같은 위치인지, 아니면 뒤에 오는지를 결정합니다.

즉, CompareTo() 메서드는 현재 컬렉션 객체가 정렬 순서에서 두 번째 객체보다 작은지, 같은지, 큰지를 판별하며 그 결과를 정수 값으로 반환합니다.

명시적 구현을 제공하는 클래스

IStructuralComparable 인터페이스는 개발자가 직접 구현하기보다는 .NET에서 제공하는 클래스들이 명시적 구현(explicit implementation)으로 지원하고 있습니다.

  • 제네릭 튜플 클래스 — Tuple<T1>, Tuple<T1,T2>, Tuple<T1,T2,T3> 등 다양한 형태의 튜플 클래스
  • Array 클래스 — 배열 요소 간의 구조적 비교를 지원

활용 예시

다음은 두 배열을 구조적으로 비교하는 간단한 예입니다.

int[] arr1 = { 1, 2, 3 };
int[] arr2 = { 1, 2, 4 };

// StructuralComparisons.StructuralComparer를 사용해 요소 단위로 비교
int result = StructuralComparisons.StructuralComparer.Compare(arr1, arr2);
// result가 음수면 arr1이 앞선 순서, 양수면 뒤처짐, 0이면 동일

이처럼 IStructuralComparable은 배열이나 튜플처럼 여러 값을 담는 자료구조를 요소 단위로 정확하게 비교해야 할 때 유용하게 활용됩니다.