11.4.6 구조적 동일성과 순차성 비교
ValueTuple 타입은 일반적인 IEquatable과 IComparable 인터페이스 외에도 IStructuralEquatable과 IStructuralComparable을 명시적으로 구현한다. 이 인터페이스는 .NET 4.0부터 포함되었는데 불변 클래스에 대한 배열과 튜플만이 이 인터페이스를 구현한다. 나는 이 인터페이스를 직접 사용해 본 경험이 없지만, 그렇다고 이 인터페이스를 사용할 수 없거나 올바르게 사용하기 어렵다는 의미는 아니다. 각각의 인터페이스는 동일성과 순차성을 제공하는 것이며, 개별 요소를 비교할 때 사용하는 비교기(comparer)를 매개변수로 취할 수 있다.
public interface IStructuralEquatable
{
bool Equals(Object, IEqualityComparer);
int GetHashCode(IEqualityComparer);
}
public interface IStructuralComparable
{
int CompareTo(Object, IComparer);
}
이 인터페이스를 만든 이유는 조합 객체의 동일성과 순차성을 제공하기 위함인데, 이때 조합 객체 내부의 개별 요소들을 비교할 수 있는 비교자를 지정하도록 했다. ValueTuple 타입이 구현하고 있는 일반적인 비교 연산은 정적 타입에 대해 매우 안정적이지만, 튜플 내의 개별 요소들을 비교할 때 항상 기본적으로 제공되는 방법만을 사용할 수 있으므로 유연성이 부족하다. 다음 예제는 문자열을 비교할 때 대소문자를 구분하지 않는 비교 방식을 사용한 예다.