같음 비교(C# 프로그래밍 가이드)
두 값이 같은지 비교해야 하는 경우가 종종 있습니다. 예를 들어, 두 변수에 포함된 값이 같음을 의미하는 값 일치 또는 동등성을 테스트하거나 두 변수가 메모리에 있는 동일한 내부 개체를 참조하는지 확인해야 하는 경우가 있습니다. 이 중 두 번째 유형의 일치는 참조 일치 또는 같음이라고 합니다. 이 항목에서는 두 유형의 일치에 대해 설명하고 자세한 내용을 포함하는 다른 항목에 대한 링크도 제공합니다.
참조 일치
참조 일치는 두 개체 참조가 동일한 내부 개체를 참조함을 의미합니다. 이러한 일치는 다음 예제에서와 같이 간단한 할당을 통해 발생할 수 있습니다.
using System;
class Test
{
public int Num { get; set; }
public string Str { get; set; }
static void Main()
{
Test a = new Test() { Num = 1, Str = "Hi" };
Test b = new Test() { Num = 1, Str = "Hi" };
bool areEqual = System.Object.ReferenceEquals(a, b);
// False:
System.Console.WriteLine("ReferenceEquals(a, b) = {0}", areEqual);
// Assign b to a.
b = a;
// Repeat calls with different results.
areEqual = System.Object.ReferenceEquals(a, b);
// True:
System.Console.WriteLine("ReferenceEquals(a, b) = {0}", areEqual);
// Keep the console open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
이 코드에서는 두 개체가 만들어지고 대입문 이후 두 참조에서 동일한 개체를 참조합니다. 따라서 두 참조는 참조 일치를 갖습니다. 두 참조가 동일한 개체를 참조하는지 여부를 확인하려면 ObjectReferenceEquals() 메서드를 사용합니다.
참조 일치라는 개념은 참조 형식에만 적용됩니다. 값 형식 개체의 경우 값 형식 인스턴스가 변수에 할당될 때 값의 복사본이 만들어지기 때문에 참조 일치를 가질 수 없습니다. 따라서 두 unboxed 구조체가 메모리의 동일한 위치를 참조할 수는 없습니다. 또한 ReferenceEquals()를 사용하여 두 값 형식을 비교할 경우 개체에 포함된 값이 모두 동일해도 반환되는 결과는 항상 false입니다. 이는 각 변수가 별도의 개체 인스턴스로 boxing되기 때문입니다. 자세한 내용은 방법: 참조 일치(같음) 테스트(C# 프로그래밍 가이드)를 참조하십시오.
값 일치
값 일치란 두 개체에 포함된 하나 이상의 값이 동일함을 의미합니다. int 또는 bool 같은 기본 값 형식의 경우 값이 일치하는지 여부는 간단히 테스트할 수 있습니다. 다음 예제와 같이 == 연산자를 사용하면 됩니다.
int a = GetOriginalValue();
int b = GetCurrentValue();
// Test for value equality.
if( b == a)
{
// The two integers are equal.
}
대부분의 다른 형식에 대해 값 일치를 테스트하려면 해당 형식에서 값 일치가 어떻게 정의되는지 이해해야 하므로 약간 복잡합니다. 여러 필드 또는 속성이 있는 클래스 및 구조체의 경우 일반적으로 값 일치는 모든 필드 또는 속성의 값이 동일함을 의미합니다. 예를 들어 pointA.X가 pointB.X와 일치하고 pointA.Y가 pointB.Y와 일치할 경우 두 Point 개체는 동등한 것으로 정의될 수 있습니다.
그러나 동등성이 형식에 있는 모든 필드의 일치로 정의되어야 하는 것은 아닙니다. 필드의 하위 집합이 동등성의 기준이 될 수도 있습니다. 현재 소유하고 있지 않은 형식을 비교할 경우에는 해당 형식에 대해 동등성이 어떻게 정의되어 있는지 구체적으로 이해해야 합니다. 사용자 지정 클래스 및 구조체의 값 일치를 정의하는 방법에 대한 자세한 내용은 방법: 형식의 값 일치 정의(C# 프로그래밍 가이드)를 참조하십시오.
부동 소수점 형식의 값 일치
이진 컴퓨터에서는 부동 소수점 연산이 정밀하지 않기 때문에 부동 소수점 형식(double 및 float)에 대한 일치 비교에서 문제가 발생할 수 있습니다. 자세한 내용은 System.Double 항목의 설명 단원을 참조하십시오.
관련 항목
제목 |
설명 |
---|---|
두 변수가 참조 일치를 갖는지 여부를 확인하는 방법을 설명합니다. |
|
형식의 값 일치에 대한 사용자 지정 정의를 제공하는 방법에 대해 설명합니다. |
|
C# 언어의 중요한 기능 및 C#에서 .NET Framework를 통해 사용할 수 있는 기능에 대한 자세한 정보의 링크를 제공합니다. |
|
C# 형식 시스템에 대한 정보 및 추가적인 정보에 대한 링크를 제공합니다. |