Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 게임개발
- AR게임
- 소규모프로젝트
- 인터페이스
- 깃허브
- 로케트
- ARProgect
- 리듬게임
- 1인개발
- AR세팅
- ExtensionMethod
- Euler
- AR Foundation
- Unity
- raycast
- 레이캐스트
- 게임제작
- 병맛게임
- callbyreference
- 게임
- 짐벌락
- ar
- Quaternion
- 확장메서드
- 리듬게임에디터
- 델리게이트
- callbyvalue
- C#
- github
- 유니티
Archives
- Today
- Total
Ssssong += Dev
[C#] ReferenceEqual 본문
http://ehpub.co.kr/tag/referenceequals/
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
https://overworks.github.io/unity/2019/07/22/null-of-unity-object-part-2.html
*유니티는 C++로 제작되었지만 C#으로 래핑된 가상머신을 사용하고 있다.
C++은 메모리에서 즉시 해제하는 delete가 있지만 C#은 GC가 메모리를 수거해가는 방식이다.
따라서 유니티 상 객체(C++ 상 객체)가 날아갔더라도 가상머신에서 이를 아직 인지하지 못한 상태(C# 가상머신에서 GC가 수거해가지 않은 상태)가 될 수 있다.
https://ansohxxn.github.io/unitydocs/fakenull/
'개발 > 공부' 카테고리의 다른 글
[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 |