글 작성자: Doublsb

문제 상황

== 연산자를 오버로딩하고 사용하려 했는데, 문제가 발생했다.

a == b 와 같은 구문에서 a나 b가 null인 경우를 판단할 수 없었기 때문이었다.

 

public static bool operator ==(Stat a, Stat b)
{
	if (a == null && b == null) return true;
}

이와 같이 작성하게 되면, 스택 오버플로우가 발생한다.

이유는 당연하다. a == null인 구문도 연산자 오버로딩한 '==' 연산자를 사용하기 때문.


해결법

object.ReferenceEquals(object, object)을 사용하면 된다.

 

Equals나 ==과는 달리, object.ReferenceEquals는 재정의할 수 없는 메서드이다.

이 메서드는 지정한 object의 인스턴스가 동일한지 체크한다.

 

따라서 오버로딩한 Equals/==를 사용하지 않고 두 개체를 비교할 수 있는 것.

 

public static bool operator ==(Stat a, Stat b)
{
	if (object.ReferenceEquals(a, null))
		return object.ReferenceEquals(b, null);
        
	else if (object.ReferenceEquals(b, null))
		return false;
        
    //이후 원하는 return 코드 작성
}

==를 오버로딩할 때 위와 같이 코드를 작성하면 null 체크 이후 원하는 return값을 던질 수 있을 것이다.

반응형