더북(TheBook)

11.3.6 같음 연산자와 같지 않음 연산자(C# 7.3)

11.4.5절에서 살펴보겠지만, CLR 수준에서 보면 값 타입 튜플은 처음부터 Equals 메서드를 이용하여 동일성 여부를 비교할 수 있었다. 다만 =!= 연산자를 오버로드하지 않았다. C# 7.3부터는 두 개의 튜플 사이에 ID 변환이 가능한 경우 두 튜플을 비교할 수 있는 ==!= 연산자를 컴파일러 차원에서 지원한다(ID 변환이 가능하다는 것은 튜플 요소의 이름은 중요하지 않다는 의미이기도 하다).

컴파일러는 튜플 간의 == 연산자를 튜플의 요소 각각에 대한 == 연산으로 확장한다. 마찬가지로 != 연산자에 대해서도 튜플 요소 각각에 대한 != 연산으로 확장한다. 다음의 예를 살펴보는 것이 가장 이해하기 쉬울 것 같다.

예제 11-8 같음 연산자와 같지 않음 연산자 ▶ EqualityOperators.cs

var t1 = (x: "x", y: "y", z: 1);
var t2 = ("x", "y", 1);

Console.WriteLine(t1 == t2);  ----- 같음 연산자
Console.WriteLine(t1.Item1 == t2.Item1 &&
                  t1.Item2 == t2.Item2 &&
                  t1.Item3 == t2.Item3);

 

Console.WriteLine(t1 != t2);  ----- 같지 않음 연산자
Console.WriteLine(t1.Item1 != t2.Item1 &&
                  t1.Item2 != t2.Item2 &&
                  t1.Item3 != t2.Item3);

 


➊ 컴파일러가 생성한 코드
➋ 컴파일러가 생성한 코드
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.