Ssssong += Dev

[C#] ReferenceEqual 본문

개발/공부

[C#] ReferenceEqual

ssong_dev 2022. 11. 3. 11:25

http://ehpub.co.kr/tag/referenceequals/

 

ReferenceEquals – 언제나 휴일

C#의 object는 .NET Framework의 Object 형식을 부르는 형식 이름입니다. 앞에서도 계속 얘기를 했던 것처럼 object 형식은 모든 형식의 기반이 되는 형식입니다. C#에서 사용자 정의 형식을 정의하면 묵시

ehpub.co.kr

 

c#에서 object끼리 비교할 시, 

object.Equals(a, b) 는 가지고 있는 값이 동일한지를 판별하며

object.ReferenceEquals(a, b) 는 같은 개체인지를 판별한다.

 

즉,

int a = 1;
int b = 2;

return object.Equals(a, b); //가진 값이 같으므로 true가 나온다.

return object.ReferenceEquals(a, b); //a와 b는 각자 선언된 개체이므로 false가 나온다.
string a = "Hello World";
string b = a;
string c = String.Format("Hello World");

object.Equals(a, b); //true
object.Equals(a, c); //true

object.ReferenceEquals(a, b); //true
object.ReferenceEquals(a, c); // false

 

 

 

유니티에서 ReferenceEquals는 null 체크의 연산 비용을 줄이기 위해서도 사용된다.

유니티의 null 체크는 C++(네이티브 객체), C#(유니티 객체) 두 곳에서 하기 때문에

어느 한쪽이 null인 비교를 할 시 비용이 커진다.

 

따라서 ReferenceEquals를 사용하면 ==, !=의 오버로드 연산을 회피해서 사용할 수 있다.

 

 

https://overworks.github.io/unity/2019/07/16/null-of-unity-object.html

 

유니티 오브젝트의 null 비교 시 유의사항

다음글: 유니티 오브젝트의 null 비교 시 유의사항 2

overworks.github.io

https://overworks.github.io/unity/2019/07/22/null-of-unity-object-part-2.html

 

유니티 오브젝트의 null 비교 시 유의사항 2

이전글: 유니티 오브젝트의 null 비교 시 유의사항

overworks.github.io

 

 

*유니티는 C++로 제작되었지만 C#으로 래핑된 가상머신을 사용하고 있다.

C++은 메모리에서 즉시 해제하는 delete가 있지만 C#은 GC가 메모리를 수거해가는 방식이다.

따라서 유니티 상 객체(C++ 상 객체)가 날아갔더라도 가상머신에서 이를 아직 인지하지 못한 상태(C# 가상머신에서 GC가 수거해가지 않은 상태)가 될 수 있다.

 

https://ansohxxn.github.io/unitydocs/fakenull/

 

Unity C# > 유니티 오브젝트의 fake null

🚀 Destroy

ansohxxn.github.io

 

'개발 > 공부' 카테고리의 다른 글

[C#/유니티] (최적화) Dictionary와 Enum  (0) 2022.11.14
Message Queue  (0) 2022.11.03
[유니티] Gamma와 Linear  (0) 2022.11.02
[유니티/젠킨스] Jenkins  (0) 2022.10.28
[유니티/DirectX/OpenGL] 셰이더  (0) 2022.10.26