IStructuralEquatable 인터페이스는 두 개체가 구조적 동등성(Structural Equality)을 갖는지 비교할 수 있도록 지원하는 메서드를 정의합니다. 여기서 구조적 동등성이란, 참조가 아닌 값 자체가 동일할 때 두 개체를 동등하다고 판단하는 것을 의미합니다.
IStructuralEquatable의 주요 메서드
이 인터페이스는 다음 두 가지 메서드를 포함하고 있습니다.
| 번호 | 메서드 및 설명 |
|---|---|
| 1 | Equals(Object, IEqualityComparer) 현재 인스턴스와 지정된 개체가 구조적으로 동등한지 여부를 판단합니다. |
| 2 | GetHashCode(IEqualityComparer) 현재 인스턴스에 대한 해시 코드를 반환합니다. |
사용 예제
아래 예제에서는 Tuple 개체를 생성한 뒤, IStructuralEquatable 인터페이스를 활용해 두 튜플의 동등성을 확인하는 방법을 살펴보겠습니다.
1. Tuple 생성
var tupleOne = Tuple.Create(26.3, Double.NaN, 35.6);
var tupleTwo = Tuple.Create(26.3, Double.NaN, 35.6);
두 튜플은 동일한 값(26.3, NaN, 35.6)으로 생성되었습니다.
2. 구조적 동등성 검사
이제 기본 비교자(Default Comparer)를 사용하여 IStructuralEquatable.Equals를 호출함으로써 두 튜플의 동등성을 확인해 보겠습니다.
IStructuralEquatable chk = tupleOne;
Console.WriteLine(chk.Equals(tupleTwo, EqualityComparer<object>.Default));
실행 결과
True
결과는 True입니다. 일반적인 참조 비교에서는 서로 다른 개체이기 때문에 False가 나오겠지만, IStructuralEquatable은 각 요소의 값을 하나씩 비교하므로 두 튜플이 구조적으로 동등하다고 판단됩니다. 특히 Double.NaN처럼 일반 연산자(==)로는 같다고 판정되지 않는 값도, 기본 비교자는 Double.Equals 방식을 사용하기 때문에 NaN과 NaN을 동일하게 취급한다는 점도 주목할 만합니다.
정리
IStructuralEquatable은 배열(Array), 튜플(Tuple) 등 복합 자료형의 내부 요소들을 값 단위로 비교해야 할 때 유용하게 사용됩니다. 컬렉션이나 데이터 구조의 동등성 검사 로직을 직접 구현할 때 이 인터페이스를 활용하면 더욱 정확하고 명확한 비교 처리가 가능합니다.