Language/C#

[C#] == , Equals, ReferenceEquals

리네엔 2024. 11. 14. 22:13

Big Integer를 구현하면서 ==를 오버로드 하다보면 노란색 경고로 !=, Equals 등을 구현하지 않았다고 뜬다.
==와 Equals는 동일한 작동일 것 같은데 왜 이것도 오버라이드 하라고 빼액 거리는지 둘이 어떤 차이가 있는지 궁금해졌다.
근데 또 ==을 오버라이드하다보면, ReferecneEquals로 null체크를 한다. 이건 또 뭘까?

== 연산자

  • 값 타입 :두 값이 비슷한지 비교
  • 참조 타임 : 두 객체가 동일한 메모리 위치를 참조하는지 비교

Equals

  • 매서드로, 클래스에만 존재
  • 객체의 동일성을 판단하는데 사용
  • 기본적으로 두 객체가 같은 인스턴스를 가리키는지 확인

ReferenceEquals

  • Object 클래스의 static method로, 두 객체가 동일한 참조를 가리키는지 확인
  • 값형식은 값을 박싱하여 비교하기때문에 동일한 참조를 가리키지 않음!
  • 두 참조가 동일한 인스턴스를 가리키는지 확인하고 싶을 때 사용
  • 오버라이드 될 수 없음

정리하자면,

== 연산자 Equals ReferenceEquals
오버로드 오버라이드 오버라이드 불가
값 / 참조 값/ 참조 참조만
말그대로 연산자, 양 옆에 값을 받아 사용 매서드 매서드

'Language > C#' 카테고리의 다른 글

[C#] Span  (0) 2024.11.12
[C#] Skip  (0) 2024.11.06
[C#] Reflection - MemberInfo/FieldInfo / PropertyInfo  (0) 2024.10.30
[C#] Const와 Readonly  (0) 2024.10.14
[C#] Serialization & Deserializaton  (0) 2024.10.14