CLOSE SEARCH

C#에서의 객체 비교

C#에서는 두가지 방식으로 객체를 비교한다. 

  • 참조 비교 : 객체의 참조 값이 같은지 비교. 즉 같은 메모리를 가리키고 있는지 비교
  • 값 비교 : 객체가 가지고 있는 값을 비교
이러한 비교는 기본적으로 최상위 클래스인 Object의 Equals(virtual)를 통해 이루어진다. Equals는 기본적으로 참조비교를 수행하지만 하위클래스에서 재정의되어 다양한 형태의 비교를 수행하게 된다. 또한 ReferenceEquals 정적함수를 통해서 참조비교를 수행할 수도 있다.
Equals는 가상함수이기 때문에 새로운 클래스를 생성할때 해당 클래스에 적합하게 동작하도록 아래와 같은 형태로 재정의 해야 한다.

이렇게 Equals를 재정의하게 되면 기본적인 참조비교가 수행되지 않고 사용자가 정의한 비교코드가 수행된다. 이러한 재정의 작업을 수행할때 부가적으로 GetHashCode 함수도 재정의해 주어야 한다.  그렇지 않으면 Object.GetHashCode()를 재정의하지 않았다는 경고가 발생하게 된다.

Filed under: Programming Languages