C#

[C#]인스턴스 비교 - ReferenceEquals 메서드

DevStory 2022. 7. 13.

ReferenceEquals 메서드

C# 최상위 클래스인 Object에 존재하는 ReferenceEquals() 메서드는 매개변수로 전달된 두 개의 객체가 동일한 인스턴스인지 확인하기 위해 사용됩니다.

 

ReferenceEquals() 메서드는 재정의할 수 없으며 두 개의 객체가 동일한 인스턴스라면 true를 반환하고 그렇지 않으면 false를 반환합니다.

 

참조 형식에서 값이 할당되는 과정을 모르신다면 아래 포스팅을 참고해주세요. 값 형식과 참조 형식에서 값이 할당되는 과정을 이해하셔야 ReferenceEquals() 메서드를 이해할 수 있습니다.

 

[C#]값 형식(Value Types)과 참조 형식(Reference Types)

값 형식(Value Types)과 참조 형식(Reference Types) C#에서는 메모리에 공간에 데이터를 할당하는 두 가지 방법이 있습니다. 값 형식(Value Types)은 스택(Stack) 공간에 데이터를 할당하며, 참조 형식(Referenc..

developer-talk.tistory.com


예제 1. 객체 비교

다음 예제는 object 타입의 두 객체를 == 연산자로 비교합니다.

class Program
{
  static void Main(string[] args)
  {
    object obj1 = 100;
    object obj2 = 100;

    if(Object.ReferenceEquals(obj1, obj2))
    {
      Console.WriteLine("obj1과 obj2는 동일합니다.");
    } else
    {
      Console.WriteLine("obj1과 obj2는 동일하지 않습니다.");
    }
  }
}

[실행 결과]

obj1과 obj2는 동일하지 않습니다.

obj1, obj2는 동일한 값을 가지는 것처럼 보이지만 참조하고 주소의 값이 다릅니다. 따라서 false가 반환되었습니다.

 

다음 예제는 obj1을 obj2에 할당합니다.

class Program
{
  static void Main(string[] args)
  {
    object obj1 = 100;
    object obj2 = obj1;

    if(Object.ReferenceEquals(obj1, obj2))
    {
      Console.WriteLine("obj1과 obj2는 동일합니다.");
    } else
    {
      Console.WriteLine("obj1과 obj2는 동일하지 않습니다.");
    }
  }
}

 [실행 결과]

obj1과 obj2는 동일합니다.

obj1을 obj2에 할당하면 참조하고 있는 주소의 값이 동일합니다.


예제 2. null 비교

ReferenceEquals() 메서드는 null을 비교하는 방법에도 유용합니다.

 

다음 예제는 Equals() 메서드를 사용하여 null을 비교합니다.

class Program
{
  static void Main(string[] args)
  {
    object obj = null;

    if(obj.Equals(null))
    {
      Console.WriteLine("obj와 null은 동일합니다.");
    } else
    {
      Console.WriteLine("obj와 null은 동일하지 않습니다.");
    }
  }
}

[에러 내용]

Equals() 메서드를 호출하는 객체가 null인 경우 NullReferenceException 예외가 발생합니다. 따라서 객체가 null인지 비교하는 방법으로 적절하지 않습니다.

 

하지만 다음 예제처럼 ReferenceEquals() 메서드를 사용한다면 예외 없이 객체가 null인지 비교할 수 있습니다.

class Program
{
  static void Main(string[] args)
  {
    object obj = null;

    if(Object.ReferenceEquals(obj, null))
    {
      Console.WriteLine("obj와 null은 동일합니다.");
    } else
    {
      Console.WriteLine("obj와 null은 동일하지 않습니다.");
    }
  }
}

[실행 결과]

obj와 null은 동일합니다.

정리

  • Object 클래스의 ReferenceEquals() 메서드는 재정의할 수 없습니다.
  • Object 클래스의 ReferenceEquals() 메서드는 두 객체가 동일한 인스턴스인지 확인하기 위해 사용되며 null 비교에도 유용합니다.
반응형

댓글